Ich habe eine lange laufende Anwendung, die aufgrund eines Speicherverlustes konsequent fehlschlägt.Verweise auf statische Eigenschaften verursachen Speicherverluste
Ich vermute, meine Verwendung von statischen Eigenschaften kann die Ursache sein. Hier ist ein Beispiel dafür, was ich heute:
public class StaticReferences
{
public static readonly object Fixed1 = new object();
}
public class ShortLived
{
public object Object1;
}
public class Doer // This class is instantiated once
{
public void DoStuff() // This method is called over and over again.
{
var shortLived = new ShortLived()
{
Object1 = StaticReferences.Fixed1
};
}
}
Wird eine Instanz von ShortLived
mit seinem Verweis auf StaticReferences.Fixed1
(über die ShortLived.Object1
Eigenschaft) erhalten richtig Müll gesammelt, wenn es außerhalb des Gültigkeitsbereichs ist?
Was lässt Sie glauben, dass ein Speicherleck vorliegt? –
Es handelt sich um eine Konsolenanwendung, die einen Prozess ausführt, der einige Stunden in Anspruch nimmt. Es schlägt mit einer Out of Memory-Ausnahme fehl. Ich lief es durch Jetbrains DotMemory. Der nicht verwaltete Speicherplatz wächst weiter. Managed memorý ist stabil .. –
@JakobGade Was macht Ihr Programm, das nicht verwalteten Speicher benötigt? Wird dieser Teil von Ihnen oder einer Drittanbieterkomponente implementiert? Wie wird nicht verwalteter Speicher gehandhabt? – xxbbcc