2012-11-13 11 views
5

Ich habe einen .NET-Thread, der Core # 7 zugeordnet ist. Die Thread-Funktion wird einmalig in 300ms ausgelöst. Anfangs dauert es etwa 20-30 ms, um einen Anruf auszuführen. Aber diese Zeit erhöht sich allmählich und wird nach etwa 2,52.000 Anrufen mehr als 150ms.Thread erhöht die Prozessorauslastung nach und nach

Auch bei 10% Nutzung von Kern # 7 beginnt, bemerkte ich. Zu dem Zeitpunkt, zu dem die Anzahl der Aufrufe an die Thread-Funktion 2,52.000 Prozessor-Nutzung von Kern # 7 erreicht, wird um 60%. Wenn ich die Thread-Funktion nicht mehr auslöst, wird die Prozessorauslastung 0%. Aber wenn ich erneut triggere, beginnt die Kernnutzung bei 60% (nicht bei 0%) und steigt wieder allmählich an.

Ich habe auch bemerkt, kein Leck für den Applikationsspeicher ist.

In meiner Thread-Funktion Ich kombiniere die Elemente von zwei Wörterbücher und Hinzufügen zu einem anderen Wörterbuch in einer foreach-Schleife. Anzahl der Elemente im Wörterbuch wird immer 45.

ich diese Anwendung wollen laufen 24/7 werden. Bitte lassen Sie mich einige Tipps wissen, um diese Prozessor-Nutzung konstant zu halten.

+0

Sie sagen: „Anzahl der Elemente im Wörterbuch immer 45 sein“ Ist das die Anzahl der Elemente in jedem der drei Wörterbücher? Sind Sie sicher, dass keines der Wörterbücher wächst? Das klingt für mich wie ein Wörterbuch, das einen benutzerdefinierten Schlüsseltyp verwendet, der 'GetHashCode' nicht korrekt implementiert. –

+0

Dank Jim Mischel, Nein. Maximale Anzahl der kombinierten Wörterbuch ist 45. Es wird gelöscht, sobald es 45 erreicht. Auch maximale Anzahl der anderen zwei Wörterbücher nie überqueren 10. Mein Wörterbuch ist als erklärt Dictionary myResults = neues Dictionary ; ' –

+0

Dann müssen Sie Code anzeigen. Es ist sehr unwahrscheinlich, dass die Threading-Bibliothek diese zunehmende CPU-Auslastung verursacht. Viel wahrscheinlicher ist es etwas in Ihrem Code. –

Antwort

4

Wenn Sie ein Element zu einem Dictionary hinzufügen die Kapazität erhöht werden müssen, können. Wird dein Wörterbuch für immer weiter wachsen?

Von MSDN:

Wenn Count geringer ist als die Kapazität ist, nähert sich dieses Verfahren einen O (1) Betrieb. Wenn die Kapazität erhöht werden muss, um das neue Element aufzunehmen, wird diese Methode zu einer O (n) -Operation, wobei n die Anzahl ist.

+0

Danke Jonathon Reinhart, Größe meines Wörterbuchs kreuzt niemals 45. –

Verwandte Themen