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
, он сначала хранит данные в памяти, а затем скрывается на жестком диске, верно?
Да, они оба равны в том, что ни один из них не компилируется. –
@Jon Skeet Это псевдокод C#. Конечно, он не компилируется. – Neir0
Псевдокод не обладает характеристиками производительности. Дайте * реальный * код, и мы можем говорить о производительности. Учитывая, что 'StreamWriter' будет всегда писать в поток, производительность будет частично зависеть от того, что делает этот поток. –