2012-01-03 7 views
1

Что касается предотвращения ошибок «уже в использовании», я хочу спросить, может ли первый фрагмент кода быть потенциально опасным, если он вызван несколько раз из нескольких клиентов? Или оба блока кода безопасны?Блокировка AppendAllText vs TextWriter

Я спрашиваю, потому что второй codenippet вызывает метод close, который также делает утилиту, которая звучит безопаснее.

//FIRST 
lock (_myLock) 
{ 
    File.AppendAllText(_filePath, text); 
} 


//SECOND 
lock (_myLock) 
{ 
    TextWriter tw = new StreamWriter(_filePath, true); 
    tw.Write(text); 
    tw.Close(); 
} 
+0

Почему бы не держать его в файл обрабатывать, как долго она, как ожидается, записать в? Используйте блокировки для управления записью несколькими клиентами. –

ответ

5

Они оба одинаковы. File.AppendAllText Вызовы тоже.

private static void InternalAppendAllText(string path, string contents, Encoding encoding) 
{ 
    using (StreamWriter writer = new StreamWriter(path, true, encoding)) 
    { 
     writer.Write(contents); 
    } 
} 
+0

В этом случае будет * накладные расходы на открытие и закрытие дескриптора файла *; которые могут быть добавлены к стоимости, если она вызывается несколькими клиентами в несколько раз. –

+0

Правда, но это было не то, о чем попросил ОП. –

1

Оба одинаково безопасны.

Как вы применили блокировку, так что даже если он вызывается из нескольких клиентов только один поток будет выполнение в определенное время, так что это не опасно, а первый вариант является более простым

В MSDN говорит о AppendAllText метод

The file handle is guaranteed to be closed by this method

Таким образом, в первой части кода .Net уже делает дополнительную работу вашей делают в подходе 2

Смежные вопросы