2012-06-22 125 views
0

以下兩個代碼示例在性能方面是否相等?內存緩衝區和IO操作

代碼示例1:

var count = 9999999999; 

using(var sw = new StreamWriter()) 
{ 
    for(int i=0;i<count;i++) 
    { 
     var result = SomeRelativeLongOperation(i); 
     sw.WriteLine(result);  
    } 
} 

代碼示例2:

var count = 9999999999; 
var resultCollection = new .... 

using(var sw = new StreamWriter()) 
{ 
    for(int i=0;i<count;i++) 
    { 
     resultCollection.Add(SomeRelativeLongOperation(i)); 

     if(resultCollection.Count%100==0) 
     { 
     WriteBlock(sw,resultCollection);  
     resultCollection.Clear(); 
     } 
    } 
} 

我知道,Windows使用的內存緩衝區的IO操作。所以,當我調用StreamWriter.WriteLine方法時,它首先將數據存儲在內存中,然後刷新到硬盤驅動器,對吧?

+3

是的,他們都是平等的,他們都沒有編譯。 –

+0

@Jon Skeet這是一個c#僞代碼。當然,這不是編譯。 – Neir0

+1

僞代碼不具有性能屬性。給*真正*代碼,我們可以談論性能。鑑於'StreamWriter'將始終寫入一個流,性能將部分取決於流的功能。 –

回答

0

StreamWriter已經被緩衝了,所以添加一個額外的緩衝區只會降低它的效率。