Я пишу это задолго до того, как на этот вопрос дан ответ, но в данных ответах отсутствует определенный аспект:
OutputDebugString может быть довольно быстрым, когда никто не слушает его вывод. Однако наличие слушателя, работающего в фоновом режиме (будь то DbgView, DBWin32, Visual Studio и т. Д.), Может сделать его более чем в 10 раз медленнее (намного больше в среде MT). Причина заключается в том, что эти слушатели перехватывают событие отчета, и их обработка события выполняется в рамках вызова OutputDebugString. Более того, если несколько потоков одновременно вызывают OutputDebugString, они будут синхронизированы. Для получения дополнительной информации см. Осторожно: DebugView (OutputDebugString) и производительность .
В качестве примечания, я думаю, что если вы не используете приложение в реальном времени, вам не следует беспокоиться о том, что для выполнения вызовов 10M требуется 50 секунд. Если ваш журнал содержит 10 миллионов записей, то потраченные 50 секунд - это наименьшая из ваших проблем, теперь, когда вам нужно как-то проанализировать зверя. Журнал 10K звучит гораздо разумнее, и его создание займет всего 0,05 секунды согласно измерениям Sharp.
Итак, если ваш вывод находится в пределах разумного размера, использование OutputDebugString не должно причинить вам такой большой вред. Однако имейте в виду, что замедление произойдет, как только кто-то в системе начнет слушать этот вывод.