2014-09-18 1 views
1

Je travaille actuellement sur une liste de chaînes List<string> datavalue qui contiennent des valeurs délimitées à l'intérieur, j'ai essayé de calculer pour le KB en utilisant cette fonction int strlen = Encoding.UTF8.GetByteCount(datavalues.ToString()); et je suis obtenir une valeur de 48 dans ma variable Strlen. Après avoir écrit la liste datavalue de la chaîne dans un fichier texte, la taille du fichier généré était de 2430 Ko. quelle est la différence quand vous avez la taille d'une liste de chaînes et quand vous l'écrivez? Y at-il des caractères ajoutés par la suite qui rendent le fichier de sortie grand?Différence entre KB avant d'écrire sur le fichier et Après avoir écrit sur le fichier

+0

Je crois que c'est ceci http://stackoverflow.com/questions/15470787/please-help-me-understand-size-vs-size-on-disk – Mashton

+0

Lorsque vous appelez ToString sur une liste, il va donner vous "System.Collections.Generic.List'1 [System.String]" qui est de 48 octets en UTF8. –

+0

C'est le nom du type. Bien sûr, "System.Collections.Generic.List'1 [System.String]" a une longueur de 48 octets. N'a rien à voir avec la taille des chaînes dans la liste bien sûr. –

Répondre

5

A List<String> (qui est ce que votre variable est datavalues) affichera ce qui suit lorsque ToString est appelé:

System.Collections.Generic.List [chaîne] (ou quelque chose comme ça)

D'une longueur approximative de 48 octets. Le contenu des chaînes ne sont pas inclus. Pour obtenir la pleine longueur, vous devez faire quelque chose comme:

String.Join("", dataValues.ToArray()).Length; 
1

datavalues.ToString est la représentation de chaîne de la liste elle-même. Si vous voulez la taille de toutes les chaînes dans la liste, vous pouvez faire quelque chose comme:

var len = datavalues.Sum(l => Encoding.UTF8.GetByteCount(l)); 
1

Ceci est très inexact. Suivre serait mieux

long size = 0; 
object o = new object(); 
using (Stream s = new MemoryStream()) { 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(s, o); 
    size = s.Length; 
} 

Notez également que ma taille d'allocation de disque est 4096 octets.

enter image description here

fichier ne peut alloue de l'espace où file_content_size < = n * allocation_size.

Notez également que certains caractères en UTF8 sont stockés avec 1 octet et d'autres avec 6 octets!

Questions connexes