эффект BufferSize

У меня есть программа, которая использует многопоточность (много потоков) и должна регистрировать данные из каждого потока. Он выводит много очень маленьких выборок данных, но делает это очень быстро. Мой интерес к данным состоит в том, чтобы регистрировать все образцы непрерывным образом.

Поэтому мне нужно зарегистрировать только несколько номеров, которые обновляются с высокой частотой. Я хотел бы добавить данные в один файл (несколько потоков в один файл).

Что меня удивляет, если я использую streamwriter ea

const int BufferSize = 65536;  // 64 Kilobytes
StreamWriter sw = new StreamWriter("filename", true, Encoding.UTF8, BufferSize);

Каков эффект Buffersize? Не будут ли данные записываться до тех пор, пока буфер не будет заполнен или пока устройство записи потока не будет сброшено на диск? (или сбрасывается, используя конструкцию using (также заканчивающуюся с помощью сбрасывания операторов). Что касается дизайна программы, я мог бы поместить метод записи потока в каждый поток или создать один модуль записи при запуске программы (чтобы потоки выполняли только запись добавления ).

Для меня важно быстрое ведение журнала, и все должно быть записано на диск, так как я не могу потерять образцы. Я должен быть уверен, что он всегда записывается, а не ставится в очередь, потому что буфер еще не заполнен. Мне также нужно предоставлять эти данные непрерывным образом, пока не будет нажата какая-либо кнопка. (не могу сохранить в памяти)


person Peter    schedule 19.06.2017    source источник
comment
В ваших требованиях указано, что вы не хотите буферизовать. Так что, конечно, размер буфера не имеет никакого значения. Установите AutoFlush = true и на этом все.   -  person Hans Passant    schedule 19.06.2017


Ответы (1)


Вы можете установить AutoFlush , чтобы буфер сбрасывался в Stream после каждого вызова StreamWriter.Write()

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

person Zac Faragher    schedule 19.06.2017
comment
так много пишет непрерывно, тогда бы автосброс, спасибо, я не знал, что у него есть такая опция - person Peter; 19.06.2017