Sprawdzam, ile czasu potrzeba na wykonanie danej operacji. Operacja jest tak:Aplikacja działa szybciej z analizą wydajności studia wizualnego
Parallel.ForEach(items, item => SaveScheme(item));
Sposób SaveScheme
współpracuje z bazą danych: wykonuje kilka zapytań i współpracuje z informacji. Ilość elementów w kolekcji items
może być wystarczająco duża.
Po uruchomieniu tej operacji ukończenie jej zajmuje około 20-40 sekund. Ale kiedy uruchomię go z włączonym profilowaniem, zajmuje to tylko 3 sekundy!
Nie znalazłem żadnych informacji na temat tego problemu. Przypuszczam tylko, że dzięki profilowaniu Parallel.ForEach
tworzy więcej wątków niż bez niego, ale nie wiem na pewno, a nawet jeśli to prawda, nie wiem, co z tym zrobić.
Dlaczego tak się dzieje i jak mogę archiwizować tę wydajność, gdy uruchamiam aplikację bez profilowania?
UPD. Parallel
nie ma nic wspólnego z tym: testowałem z prostym foreach
, a operacja nadal kończy się w 3 sekundy!
hmm Dziwne, faktycznie spowolni ... – Anuraj
Czy próbowałeś wizualizatora Concurrency? – h1ghfive
Próbowałem Wizualizatora Concurrency, ale to, co tam zobaczyłem, nic mi nie mówi. Wiem, ile wątków jest i tak dalej, ale bez profilera nie wiem, co się stanie, gdy operacja zajmie 40 sekund. Więc nie mogę tego porównać. – STiLeTT