2014-09-18 107 views
1

我目前正在研究一个字符串为List<string>的数据值列表,里面保存着分隔值,我试图使用此函数为KB计算int strlen = Encoding.UTF8.GetByteCount(datavalues.ToString());,我是在我的Strlen变量中获得48的值。在将字符串的datavalue列表写入文本文件后,生成的文件的大小为2430 kb。当你有一个字符串列表的大小和写入时间的差别有多大?是否有一些字符被添加后使输出文件变大?在写入文件之前和写入文件之后的差异

+0

我相信这是这个http://stackoverflow.com/questions/15470787/please-help-me-understand-size-vs-size-on-disk – Mashton 2014-09-18 16:07:23

+0

当你在列表上调用ToString时,它会给你是“System.Collections.Generic.List'1 [System.String]”,它是UTF8中的48个字节。 – 2014-09-18 16:07:59

+0

这是该类型的名称。当然,“System.Collections.Generic.List'1 [System.String]”长48字节。与列表中的字符串的大小没有任何关系。 – 2014-09-18 16:08:31

回答

5

一个List<String>(这是你的变量datavalues是什么)将输出以下时ToString被称为:

System.Collections.Generic.List [字符串](或类似的东西)

它大约有48个字节长。不包括字符串的实际内容。要获得完整的长度,你需要做的是这样的:

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

datavalues.ToString是列表本身的字符串表示。如果你想要列表中所有字符串的大小,你可以这样做:

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

这是非常不准确的。以下更好

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

另请注意,我的磁盘分配大小是4096字节。

enter image description here

文件只能分配空间,file_content_size < = N * allocation_size

还要注意的是,在某些UTF8字符存储与1字节和其他人6个字节