2009-01-13 8 views
0

j'ai un nom de fichier qui a le format suivant:incrémentation automatique nom

horodatage-nom d'utilisateur-1

Ce fichier est constamment ise écrit, mais avant qu'il ne soit trop gros je veux créer un nouveau fichier .

horodatage-nom d'utilisateur-2

Comment puis-je acheive cela avec l'aide de moins de mémoire (c.-à-pas ou peu variables)

voici ma version:

 private void Split() { 
      char[] strArr = FlowArgs.Filename.ToCharArray(); 
      int num; 
      //get the last number 
      if(Int32.TryParse(strArr[strArr.Length - 1].ToString(), out num)) { 
       num += 1; 
      } 
      //replace the old number with the new number 
      char.TryParse(num.ToString(), out strArr[strArr.Length - 1]); 
      FlowArgs.Filename = strArr.ToString(); 

     } 

Edit: J'ai ajouté une propriété "version" (int) dans la classe FlowArgs. Cependant, mon nouveau problème est que comment puis-je ajouter cela à la fin de thefilename

+0

L'optimisation prématurée est la racine de tout mal –

Répondre

5

Je pense que vous devriez simplement stocker le compteur dans un int. Je comprends que vous voulez économiser de l'espace mémoire mais pour être honnête, un int supplémentaire est vraiment dans la catégorie "acceptable". Je veux dire, l'analyseur Int32 perd probablement beaucoup plus de mémoire. N'oubliez pas que sur x86, l'espace mémoire est craché sur des pages de 4096 octets, donc il y a beaucoup plus de mémoire perdue que ces 4 octets.

EDIT: Vous voulez sans doute avoir une méthode comme GetNextFileName() dans votre classe que vous génère le prochain nom de fichier (pouvoir factoriser votre code en petits morceaux est important, beaucoup plus important que de sauver l'espace mémoire):

private int nextFileNumber = 0; 

private string GetNextFileName(string userName) 
{ 
    return String.Format("{0}-{1}-{2}", DateTime.Now, userName, 
     nextFileNumber++); 
} 
2

« moins de mémoire » n'est pas égal à égal à « pas ou peu de variables »

variables locales ne prend peu de mémoire elle-même. Mais la création d'objets dans heap prend beaucoup plus de place, et ils nécessitent GC pour faire le nettoyage.

Dans votre exemple, votre ToCharArray() et ToString() ont créé 4 objets (objet créé indirectement non inclus).

+0

Que recommanderiez-vous alors? FlowArgs est une classe qui hérite de EventArgs .. Je suppose que je pourrais juste ajouter une autre propriété appelée "version" et incrémenter cela? – masfenix

1

votre variable de chaîne est déjà tableau de caractères:

int num=0; 
    //get the last number 
    if (Int32.TryParse(FolwArgs.Filename[FolwArgs.Filename.Length-1].ToString(), out num)) 
     num++; 
    //replace the old number with the new number 
    char.TryParse(num.ToString(), out FolwArgs.Filename[FolwArgs.Filename.Length-1]]); 
1

au lieu d'utiliser un compteur de course, pensez à utiliser datetime of creation comme la partie la modification de votre nom de fichier. De cette façon, vous n'avez pas à stocker et récupérer la valeur précédente. En utilisant la méthode ToBinary(), vous pouvez obtenir une représentation numérique de l'heure. Bien sûr, tout time format qui est acceptable dans un nom de fichier peut être utilisé - voir custom date and time format strings.

Questions connexes