Если вы делаете много небольших записей, то рефакторинг проверок на наличие FolderExists и FileExists немного поможет. Может быть, попытаться записать в файл, перехватывая любые ошибки, и проверить наличие FolderExists и FileExists в обработчике ошибок и создать их при необходимости?
Будет быстрее вывести одну большую строку, чем несколько маленьких, но вы должны сопоставить это с возможностью потери записей журнала в случае сбоя вашей программы.
Память не должна быть проблемой, если вы не записываете в файл огромную строку, и, вероятно, даже тогда.
Поскольку вы добавляете файл, чем дольше файл журнала, тем дольше будет выполняться запись, поскольку (AFAIK) каждый раз необходимо перезаписывать весь файл. Это еще одна причина для того, чтобы писать более длинные строки реже.
Не могли бы вы вместо этого использовать журнал событий Windows?