Ich habe eine C# -Konsolenanwendung, in der ich (ohne die Hilfe von Visual Studio) programmatisch GC-Aktivität programmieren möchte. wenn ich diesen Code habe zum Beispiel:Wie programmiere ich GC-Aktivität in einer C# -Anwendung?
public static void Main()
{
for (int i = 0; i < 100000; i++) AllocateByteArray();
}
private static void AllocateByteArray()
{
new byte[1000];
}
Gibt es eine Möglichkeit, die GC
Klasse zu verwenden, um zu überwachen, wie oft eine Garbage Collection stattfindet, während die Schleife läuft? Ich versuchte zunächst so etwas wie diese:
Console.WriteLine("Before:");
Console.WriteLine(GC.GetTotalMemory(false));
// do work...
Console.WriteLine("After:");
Console.WriteLine(GC.GetTotalMemory(false));
Console.WriteLine("After collection:");
Console.WriteLine(GC.GetTotalMemory(true));
aber ich erkennen die Messungen nicht wirklich mir nichts sagten, da eine GC wahrscheinlich aufgetreten, während ich mit der Arbeit tat. Ich kenne mich mit den GC-APIs in .NET nicht aus. Gibt es eine Möglichkeit, diese Arten von Statistiken programmatisch zu messen? Vielen Dank.
https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx –
Weitere GC Literatur zum Thema: [Jeder denkt über Garbage Collection der falsche Weg] (https: //blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203), [Wann wird ein Objekt für die Garbage Collection verfügbar?] (https://blogs.msdn.microsoft.com/oldnewthing/20100810 -00 /? P = 13193) und Wenn alles, was Sie wissen, falsch ist [Teil 1] (https://ericlippert.com/2015/05/18/when-everything-you-know-is-wrong-part-one/) [Teil 2] (https://ericlippert.com/2015/05/21/when-everything-you-know-is-wrong-part-two/) – theB