2012-06-22 129 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已经被缓冲了,所以添加一个额外的缓冲区只会降低它的效率。