2012-06-22 3 views
0

Являются ли следующие два примера кода равными с точки зрения производительности?Буфер памяти и операции ввода-вывода

Пример кода 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 использует буферы памяти для операций ввода-вывода. Поэтому, когда я вызываю метод StreamWriter.WriteLine, он сначала хранит данные в памяти, а затем скрывается на жестком диске, верно?

+3

Да, они оба равны в том, что ни один из них не компилируется. –

+0

@Jon Skeet Это псевдокод C#. Конечно, он не компилируется. – Neir0

+1

Псевдокод не обладает характеристиками производительности. Дайте * реальный * код, и мы можем говорить о производительности. Учитывая, что 'StreamWriter' будет всегда писать в поток, производительность будет частично зависеть от того, что делает этот поток. –

ответ

0

StreamWriter уже буферизирован, поэтому добавление дополнительного буфера просто сделает его менее эффективным.

Смежные вопросы