Мы используем следующий подход к записи текстовых файлов:
public void WriteFile(string filePath, string contents)
{
if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException("filePath"); }
if (contents == null) { throw new ArgumentNullException("contents"); }
if (File.Exists(filePath))
{
throw new InvalidOperationException(string.Format("The file '{0}' already exists", filePath));
}
StreamWriter sw = File.CreateText(filePath); // slow
sw.Write(contents);
sw.Close(); // slow
}
Мы вызываем эту функцию много раз, поэтому производительность является ключевым фактором. Две строки прокомментировали slow
, где наше приложение проводит большую часть своего времени.
Параметр contents
содержит в среднем около 10 КБ текста.
Существуют ли другие подходы в .NET или использовании Win32 API, которые, как известно, имеют значительно лучшую производительность?
Мы уже попробовали следующее:
TextWriter tw = new StreamWriter(filePath);
tw.Write(contents);
tw.Close();
Но обнаружили, что производительность аналогична нашему первоначальному подходу.
Редактировать
На основании предложений мы также попробовали:
File.WriteAllText(filePath, contents);
Однако производительность этого аналогична другим, перечисленным выше.