2014-09-18 94 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個字節