jako ćwiczenie w ciekawości bardziej niż cokolwiek innego, należy rozważyć następującą prostą klasę rejestrowania:.NET 2.0: File.AppendAllText (...) - wątek bezpiecznego wdrożenia
internal static class Logging
{
private static object threadlock;
static Logging()
{
threadlock = new object();
}
internal static void WriteLog(string message)
{
try
{
lock (threadlock)
{
File.AppendAllText(@"C:\logfile.log", message);
}
}
catch
{
...handle logging errors...
}
}
}
Czy lock
potrzeba około File.AppendAllText(...)
lub czy metoda z natury jest bezpieczna dla wątków przez własną implementację?
Wyszukiwanie informacji na ten temat daje dużo sprzecznych informacji, niektóre mówią tak, niektórzy twierdzą, że nie. MSDN nic nie mówi.
Jest to sprzeczne. Jeśli File.AppendAllText ma wyłączną blokadę zapisu, dlaczego potrzebujesz osobnej blokady? – iheanyi
Źle zrozumiałeś, to plik jest zablokowany do zapisu. Tak więc wszelkie inne wątki próbujące pisać w tym samym czasie otrzymają wyjątek. Aby temu zapobiec, musisz serializować zapisy, używając blokady w swoim programie. – Pradeep
Nie marnuj cennych zasobów bazy danych do rejestrowania, jeśli używasz ciężkiej relacyjnej bazy danych, w przeciwnym razie, jeśli używasz bazy danych lite nosql, to nie jest źle, aby zalogować się do bazy danych. Użyj czegoś takiego jak dziennik zdarzeń systemu Windows, jeśli chcesz logować się lokalnie, ale nie pisz samemu do systemu plików. Ale dlaczego nie pisać nowego pliku na dziennik zamiast dodawać, jeśli chcesz być bezpieczny i bezpieczny? –