Ich arbeite an einem Programm, das interaktive Diagramme erstellt. Das folgende Problem tritt jedoch auf, selbst wenn der Rendering-Layer des Programms deaktiviert ist.C#, Warum läuft der GC mehrmals pro Sekunde?
Auf bestimmten Bildschirmen in meiner Anwendung, nach den Visual Studio 2015 Diagnostic Tools, läuft der GC etwa 4 Mal pro Sekunde zurück und tötet die Leistung meiner Anwendung (von 120fps auf so niedrig wie 15fps).
Ich habe einige Speicher-Snapshots mit unerwarteten Zuordnungen erwartet, aber nach den Snapshots gibt es nur ein oder zwei Zuordnungen und Sammlungen von System.Internal.HandleCollector + HandleType alle paar Sekunden, was normal erscheint, auch wenn das Problem tritt nicht auf.
Einige andere Dinge, die ich bemerkt habe:
- Diese auf mehreren Rechnern geschieht.
- Dies geschieht mit oder ohne den Debugger angeschlossen.
- Die meiste CPU-Zeit der Anwendung befindet sich in clr.dll.
- Der Grund für jeden GC-Lauf wird als "Small object heap Zuweisung" aufgeführt, auch wenn keine beobachtbaren Zuordnungen in den Snapshots vorhanden sind.
An diesem Punkt bin ich ratlos. Hat jemand das gesehen oder weiß, wo ich mit dem Debuggen anfangen sollte?
Was verwenden Sie zum Generieren der Graphen? GDI +? Aktualisieren Sie die Grafik bei Datenänderungen oder ständig? –
Wir verwenden DirectX, über SharpDX. Die Graphen werden einmal erzeugt, basierend auf Benutzereingaben modifiziert und für jeden Frame gezeichnet. Das Problem tritt jedoch weiterhin auf, selbst wenn der Rendering-Layer vollständig entfernt wurde. –
Ich bin mir nicht sicher, wie die Frage "Wie debugge ich den GC, der wegen Zuordnungen ausgeführt wird, wenn Visual Studio keine Zuordnungen anzeigt?" hat keine "klare Problemaussage" und ist "für andere Leser nicht nützlich". –