2013-07-29 7 views
5

Gibt es einen einfachen Funktionsaufruf, um festzustellen, ob in der Laufzeit, in der ich aktiv bin, Concurrent GC aktiviert wurde? Wir haben eine heterogene Umgebung und müssen protokollieren, welcher Modus verwendet wird, damit wir identifizieren können, welche Systeme geändert werden müssen.Wie kann festgestellt werden, ob der gleichzeitige GC ausgeführt wird? Net

Ich merke, dass ich die exe.config untersuchen und es manuell überprüfen kann, ich habe mich nur gefragt, ob es eine Eigenschaft irgendwo sitzt, die diese Informationen freilegt, ohne einen Hack machen zu müssen.

+0

Garbage Collection Notifications http://msdn.microsoft.com/en-us/library/cc713687.aspx – Rohit

+0

nicht erhalten einen Callback ist eine ziemlich ungenaue Art der Messung, wenn GC ist gleichzeitig oder nicht ... – Spence

+0

Es sieht aus wie Es ist Teil einer Konfigurationsdatei. Sehen Sie diesen Link hilft http://msdn.microsoft.com/en-us/library/yhwzwez8.aspx –

Antwort

4

Leider sieht es nicht so aus, als wäre eine Methode eingebacken, wenn es soweit wäre, würde ich es hier sehen: System.Runtime.GCSettings..

Es sei denn, Sie haben einen guten Grund, die gleichzeitige Garbage Collection (wie standardmäßig) beizubehalten.

Im Allgemeinen sind die einzigen Dinge, die sich darum kümmern, nicht verwaltete Anwendungen, die die CLR selbst hosten (wie SQL Server oder IIS).

Ist Ihre Anwendung ein guter Kandidat für die programmatische Änderung des GCONCRONT in der exe.config? Wenn nicht, würde es scheinen, wie Sie sagten, den Wert von der Konfiguration zu lesen ist der weniger hackish Weg (IMHO).

nie weniger, ich ein wenig Forschung haben und beginnend mit 4 .Net können Sie ETW to detect garbage collection ETW events verwenden:

Event für Windows (ETW) Tracing ist ein Verfolgungssystem, das die Profilierung und Debugging-Unterstützung ergänzt bereitgestellt von .NET Framework. Beginnend mit dem .NET Framework 4, garbage collection ETW events Erfassen Sie nützliche Informationen für die Analyse der verwalteten Heap aus einer statistischen Sicht. Zum Beispiel, die das GCStart_V1 Ereignis, wird ausgelöst, wenn eine Garbage Collection stattfinden soll über die folgenden Informationen:

  • Welche Generation von Objekten gesammelt werden.
  • Was die Garbage Collection ausgelöst hat.
  • Art der Speicherbereinigung (gleichzeitig oder nicht gleichzeitig).
+1

danke für die gründliche antwort. Speicherlecksuche :(Sie können Speicherleck-Profiler nicht mit einem gleichzeitigen GC verbinden, daher müssen wir sie selektiv aktivieren, um sie anzubringen und zu verbinden. – Spence

5

Wenn System.Runtime.GCSettings.LatencyMode den Wert LatencyMode.Batch hat, wurde der gleichzeitige GC deaktiviert.

+0

Das ist das Nächste, das ich je gesehen habe – Spence

Verwandte Themen