Ich mache ein Hosting von ASP.NET MVC 5 / WCF-Apps mit hoher Dichte auf Azure App Service, und die inaktiven Apps verwenden jeweils 600 bis 1000 MB Speicher, was ziemlich viel ist, da ein Speicherauszug anzeigt, dass es sich um den GC-Heap handelt nur ca. 40MB voll. Ich vermute, dass dies auf Server-GC zurückzuführen ist, daher habe ich versucht, es zu deaktivieren, indem ich https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element folgte und hinzufügte
<gcServer enabled="false" />
zu meiner web.config, aber dies scheint keine Auswirkung zu haben als
GCSettings.IsServerGC
kehrt immer noch wahr zurück. Was fehlt mir hier?
BEARBEITEN:
Mit normalem IIS kann dies unter https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool erfolgen. In Azure App Service fehlen Ihnen jedoch die entsprechenden Berechtigungen.
quelle
Antworten:
Zunächst scheint es so, als müssten Sie die Speichernutzung von Komponenten mithilfe von GC.Collect () manuell debuggen: https://docs.microsoft.com/en-us/dotnet/api/system.gc.collect view = netcore-3.1
Auf diese Weise können Sie möglicherweise einen bestimmten Teil des Codes lokalisieren, der entweder einen Speicherverlust aufgrund einer fehlerhaften Speicherbereinigung verursacht, oder Teile, die bestimmte Bibliotheken von Drittanbietern verwenden.
Sobald Sie mit diesem ziemlich langwierigen Teil fertig sind, sollten Sie je nachdem, was Ihrer Meinung nach das Problem verursacht, entweder eine manuelle Entsorgung des Codeblocks in Betracht ziehen
(using var item = new NameOfClass())
oder sogar versuchen,IDispose
die Klassen zu implementieren , die ihn verursachen: https: / /docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose .quelle