Wann Adresse Heapfragmentierung verwaltet
-
25-09-2019 - |
Frage
Ich las einen Blogeintrag von Josh Smith, wo er einen Cache-Mechanismus verwendet, um „Heapfragmentierung verwaltet reduce“. Sein Caching reduziert die Anzahl der kurzlebigen Objekte auf Kosten der etwas langsamer Ausführungsgeschwindigkeit erzeugt wird.
Wie viel von einem Problem wird Heapfragmentierung in einer verwalteten Sprache wie C # verwaltet? Wie kann man diagnostizieren, wenn es ein Problem ist? In welchen Situationen würden Sie in der Regel zu Adresse brauchen?
Lösung
Wenn
Nicht zu schnell. Es ist im Allgemeinen sehr billig kurzlebige Objekte zu haben. Für einen Cache profitabel sein würde es viele candiadates sein müssen (sehr), und sie sollten lange genug leben, um es an die nächste Generation zu machen.
Wie kann man diagnostizieren, wenn es ein Problem ist?
Mit einem Profiler. Ich bin nicht so sicher, dass der Autor des Artikels getan.
Wie viel von einem Problem wird Heapfragmentierung in einer verwalteten Sprache wie C # verwaltet?
Soweit ich weiß, es ist selten. .NET verfügt über eine Verdichtung Garbage Collector, das verhindert, dass die meisten Formen der Fragmentierung. Es gibt Probleme mit dem Large Object Heap manchmal.
Edit:
Wenn Sie die Kommentare unter dem Artikel durchlaufen wird, dass jemand gemessen sie finden und fand den Cache viel langsamer als die Schaffung neuer EventArgs jedes Mal.
Fazit: Messen, bevor Sie die Optimierung starten. Das war keine gute Idee / example.
Andere Tipps
Wenn Sie mit 10K + kleinen kurzlebigen Objekten pro Sekunde zu tun hat, es sollte kein Problem überhaupt mit vertretbarer Menge an RAM auf einen modernen Computer sein.
Also zuerst sollten Sie den Code in allen vernünftigen Szenarien laufen und wenn es schnell genug ist -. Mach dir keine Sorgen darüber
Wenn Sie nicht zufrieden mit der Geschwindigkeit sind, sehen Sie, dass Code irgendwann ‚würgt‘ oder einfach nur neugierig, können Sie verschiedene .NET-Speicherstatistik ( http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx ) in Performance Monitor-App (kommt als Teil von Windows ). Insbesondere sind Sie in% Zeit in GC interessiert.
redgate ANTS Profiler überwacht auch diese Statistiken.
Managed Heap-Fragmentierung ist in der Regel wegen der Objekte der Pinning. Objekte erhalten gemerkt, wenn verwalteten Code das Objekt Zeiger auf den nativen Code übergibt und das Objekt kann nicht verschoben werden, da der Verweis auf den nativen Code übergeben wird. Dies ist sehr häufig, wenn es eine Menge von E / A-Aktivitäten. Wie in der Regel oben erwähnt, geschieht nur in LOH.