Если запись файла (в основном, file.flush ()) выполняется в потоке, который вызывает Trace.Write (), будет ли он зависать во время записи файла?
Да. Это связано с тем, что вызов flush () предназначен для обеспечения попадания данных на диск.
Если это так, то было бы интересно создать поток, используемый только для записи строк журнала в файл журнала, в то время как поток обработки продолжит свою работу.
Почему бы просто не перестать вызывать flush ()? Если вы не заинтересованы в том, чтобы быть абсолютно уверенными в том, что для определенной части программы все записанные на данный момент данные находятся на диске, просто прекратите вызывать flush () вручную, и он будет буферизован и записан в обычный эффективный способ.
В конечном счете, может быть небольшое преимущество записи журнала в другом потоке, если система записи на диск требует периодических синхронизаций, которые приводят к зависанию потока (что, я не уверен, так), но я ожидаю, что вы потеряете гораздо больше, чем вы получаете от реализации синхронизации, однако вы передаете свои журналируемые строки фоновому потоку. Затем вы начинаете задаваться вопросом, можете ли вы использовать очередь без блокировки или какую-либо другую сложную систему, когда действительно вам, вероятно, просто нужно было сделать это простым способом, во-первых - писать когда угодно, очищать только тогда, когда это абсолютно необходимо.