Mam aplikację, która ma 4 wątków. Każdy wątek jest w rzeczywistości Timer i wykonuje oddzielne zadanie w określonych odstępach czasu. Te wątki wyświetlają swoje dzienniki za pomocą Console.Writeline
. Wydajność jest bardzo ważna w tej aplikacji. Chciałem wiedzieć, czy usunięcie Console.Writeline
dostroi wydajność tej aplikacji, czy nie?Wpływ Console.Writeline na wydajność
Odpowiedz
mogą istnieć dwa problemy z Console.WriteLine w odniesieniu do świadczenia usług:
IO nie jest typowo „szybko” operacja.
Połączenia do komórki WriteLine są zsynchronizowane, tzn. Jeśli dwa wątki chcą pisać, jeden z nich blokuje linię WriteLine, czekając na zakończenie drugiej. Od MSDN on console:
I/O operacje, które używają tych strumieni są zsynchronizowane, co oznacza że wiele wątków może odczytać danych z lub zapisu, strumienie.
To znaczy, że jedynym sposobem na zrozumienie, czy czas spędzony na konsoli Console.WriteLine ma wpływ na wydajność konkretnej aplikacji, jest jej profilowanie. W przeciwnym razie jest to przedwczesna optymalizacja.
Jeśli służy do debugowania, powinieneś raczej użyć: Debug.WriteLine, ponieważ nie są one zawarte w wersji Release.
Nie widzę, jak to odpowiada na pytanie OP. Możesz także chcieć zebrać wyniki logowania z wersji aplikacji, a poza tym nie ma znaczenia, jaki jest cel rejestrowania. – millimoose
Możesz użyć Trace.WriteLine, zobacz http://stackoverflow.com/questions/179868/trace-vs-debug-in-net-bcl –
Tak, wykonanie Console.WriteLine zajmuje mierzalną ilość czasu.
Usunięcie wywołania Console.WriteLine lub zmiana go na zbuforowany wątek tła zapisywania danych naprawdę przyspieszyłoby aplikację.
Jednak Twój przebieg może się różnić w zależności od używanego systemu operacyjnego.
Jedynym problemem z kolejkowaniem go w wątku tła jest to, że rejestrowanie nie jest Dokładne i wątki mogły już zostać zakończone, a rejestracja jest zapisywana na konsoli. –
@JeroenvanLangen To nie jest jedyny problem. Musisz zastanowić się, jaki priorytet miałby wątek logowania. Jeśli jest wyższy niż wątki robocze, nie pomoże w ogóle. Jeśli jest niższy niż wątki robocze, bufor może wyrosnąć poza zakresem, a w aplikacji zabraknie pamięci lub wątki mogą zakończyć się oczekiwaniem na bufor o stałej pojemności. Zasadniczo, aby to zadziałało, musisz wiedzieć na pewno, że aplikacja ma wystarczająco dużo "przestojów", aby zapisać buforowany wynik logowania. – millimoose
- 1. Systemtap wpływ na wydajność
- 2. Wpływ metod wirtualnych na wydajność
- 3. Log.d i wpływ na wydajność
- 4. Jaki jest wpływ selektora uniwersalnego na wydajność?
- 5. Znaczniki a punkty wektorowe - wpływ na wydajność
- 6. Dlaczego lenistwo Haskella miało wpływ na wydajność?
- 7. Wpływ na wydajność dyrektywy ng-csp
- 8. Zagnieżdżony wpływ selektorów na wydajność i MNIEJ
- 9. Wpływ rozmiaru pakietu na wydajność w Oracle 10g
- 10. Czy dodanie [Serializable] do klasy może mieć wpływ na wydajność?
- 11. Java 8: Operacja łączenia ciągów ma znaczący wpływ na wydajność
- 12. Jaki jest wpływ nie unikatowych indeksów na wydajność w pandach?
- 13. Czy kolejność członków obiektów klasy ma jakikolwiek wpływ na wydajność?
- 14. Wpływ jvmti na wydajność, gdy debugger nie jest podłączony?
- 15. jest Console.WriteLine wąskie gardło w aplikacjach Windows?
- 16. Czy inicjalizacja zmiennej lokalnej o wartości zerowej ma wpływ na wydajność?
- 17. Console.WriteLine Podstawy
- 18. Wpływ wartości zmiennoprzecinkowej na właściwości CSS
- 19. Metoda X509Certificate2.Verify(), sprawdzanie poprawności na liście odwołania i jej wpływ na wydajność
- 20. Czy uruchamianie bazy danych SQL Server 2005 na poziomie zgodności 80 ma negatywny wpływ na wydajność?
- 21. Jak Console.WriteLine z [TestMethod]?
- 22. Console.Writeline od EventHandler
- 23. Wpływ wydajności wirtualnego dziedziczenia
- 24. Wpływ IsBackground na wątki .Net?
- 25. Wpływ SEO na hash hash?
- 26. React Native - czy console.log() ma negatywny wpływ na wydajność podczas przechodzenia do produkcji?
- 27. Korzystanie z SQLDependency vs. okresowe pobieranie z tabeli (wpływ na wydajność)
- 28. Zwiększone wykorzystanie pamięci dzięki Console.WriteLine()
- 29. log4net Logging Debug.WriteLine i Console.WriteLine
- 30. Wpływ Eventlistenerów?
Każdy kod, który nie zostanie wykonany, poprawi wydajność. Czy to istotne, to kolejne pytanie - i nie da się odpowiedzieć bez dodatkowych szczegółów. Na przykład, w której interwał liczniki czasu uruchamiają, jaką inną pracę wykonują (to może całkowicie osłabić instrukcje 'Console.WriteLine') i ile są już zsynchronizowane (niejawnie) przez inny kod. –
Właściwie to do monitorowania, a nie do debugowania. –
Dlaczego musisz zapytać, czy możesz po prostu spróbować, to nie jest takie trudne ... Dla środowiska produkcyjnego (biorąc pod uwagę znaczenie wydajności), powinieneś zachować tylko najważniejsze komunikaty debugowania. –