2012-11-13 15 views
5

Mam wątek .NET, który jest przydzielany do rdzenia # 7. Funkcja wątku jest wyzwalana raz w ciągu 300ms. Początkowo wykonanie jednego połączenia zajmuje około 20-30 ms. Ale czas ten rośnie stopniowo i staje się większy niż 150 ms po około 2,52 000 połączeń.Wątek zwiększa użycie procesora stopniowo

Również zauważyłem, że użycie rdzenia # 7 zaczyna się od 10%. Do czasu, gdy liczba wywołań funkcji wątku osiągnie 2,52 000, użycie procesora z jądra # 7 zmieni się na około 60%. Kiedy przestanę wyzwalać funkcję wątku, użycie procesora staje się 0%. Ale kiedy ponownie rozpocznę wyzwalanie, zużycie rdzenia zaczyna się od 60% (nie od 0%) i stopniowo wzrasta.

Zauważyłem również, że nie ma wycieku pamięci dla aplikacji.

Wewnątrz funkcji wątku łączę elementy dwóch słowników i dodam je do innego słownika w pętli foreach. Liczba elementów w słowniku będzie zawsze równa 45.

Chcę, aby aplikacja działała 24 godziny na dobę. Daj mi znać kilka wskazówek, dzięki którym użycie procesora będzie stałe.

+0

Mówisz: "Liczba elementów w słowniku będzie zawsze równa 45". Czy to liczba elementów w każdym z trzech słowników? Czy jesteś pewien, że żaden ze słowników nie rośnie? Brzmi to jak słownik używający niestandardowego typu klucza, który nie implementuje poprawnie 'GetHashCode'. –

+0

Dzięki Jim Mischel, Nie. Maksymalna liczba połączonych słowników wynosi 45. Zostanie wyczyszczona po osiągnięciu 45. Również maksymalna liczba pozostałych dwóch słowników nigdy nie przekroczy 10. Mój słownik jest zadeklarowany jako 'Słownik myResults = new Dictionary ; ' –

+0

Następnie musisz pokazać kod. Jest wysoce nieprawdopodobne, aby biblioteka wątków powodowała wzrost obciążenia procesora. O wiele bardziej prawdopodobne, że jest to coś w kodzie. –

Odpowiedz

4

Po dodaniu elementu do Dictionary może być konieczne zwiększenie pojemności. Czy twój słownik wciąż rośnie na zawsze?

Z MSDN:

Jeśli liczba jest mniejsza niż pojemność sposób ten zbliża się do: (1) działanie wyjścia. Jeśli pojemność musi zostać zwiększona, aby pomieścić nowy element, ta metoda staje się operacją O (n), gdzie n to liczba.

+0

Dzięki Jonathon Reinhart, Rozmiar mojego słownika nigdy nie przekracza 45. –

Powiązane problemy