Ich habe in den letzten Wochen eine C# -Anwendung ausgeführt. Als ich es anfing, hatte es ~ 10000K Speicherverbrauch. Seitdem habe ich überprüft und es ist bei einem ~ 20000K Speicherbedarf.Sollte die Garbage Collection schon gelaufen sein?
Ich weiß nicht .Net Garbage Collection sehr gut, aber ist das ein Zeichen, dass ich definitiv ein Speicherleck haben? Sollte der GC nicht schon längst gelaufen sein?
Ich las in der Garbage Collection habe hier:
https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx
Und sie haben die folgenden Bedingungen für die bei der GC laufen soll:
Das System hat einen geringen physischen Speicher. (Ich habe weit über 70000K Speicher verwenden gelassen, so dass diese nicht ausgelöst werden soll)
Der Speicher, der durch zugeordnete Objekte auf dem verwalteten Heap verwendet wird übertrifft eine akzeptable Schwelle. Dieser Schwellenwert wird kontinuierlich angepasst, während der Prozess ausgeführt wird. (wie Sie „akzeptabel“ Schwelle definieren?)
Sollte ich nicht GC erwarten in wenigen Wochen den Zeitraum laufen zu lassen?
Der häufigste Grund, warum Leute denken, dass .NET kein Müll sammelt, ist, dass sie missverstehen, was der Task-Manager ihnen zeigt und wie .NET den Haufen verwaltet. Nur weil der direkte Speicherverbrauch Ihres Programms reduziert wird, heißt das nicht, dass .NET den Speicher an Windows zurückgegeben hat. Oder vielleicht hast du ein Speicherleck. Wer weiß? Du hast kein gutes [mcve] geliefert. –
Um zu überprüfen, ob ein Speicherverlust vorliegt, verwenden Sie den Task-Manager nicht. Verwenden Sie stattdessen einen geeigneten Speicherprofiler. Da ist einer mit Visual Stuidio. – jetstream96
Von 10 MB auf 20 MB zu gehen, ohne jemals den Garbage Collector auszuführen, ist nur auf einer Server-Klasse-Maschine möglich.Es ist eine sehr geringe Menge an Speicher für ein typisches C# -Programm. Die Verwendung des verfügbaren RAM auf der Maschine ist der beste Weg, um Code schnell laufen zu lassen, und die CLR nutzt sie am besten. Sieht so aus, als ob dein Programm keine große Chance hat. Sie haben nur ein Leck, wenn Sie es konstant auf ~ 1,5 Gigabyte klettern können. Du musst die Schwelle zwischen deinen Ohren anpassen :) –