Ich verwende .NET 4.5 unter Windows 7 und finde möglicherweise ein Speicherleck.
Ich habe eine TextBlock
(nicht TextBox
- es ist nicht das Problem mit dem Rückgängigmachen), die ihren Wert jede Sekunde ändert (CPU-Auslastung, Zeit, etc ...).
Mit .NET Memory Profiler
(und indem ich einfach den Task-Manager beobachte) bemerkte ich, dass der Speicher weiter wuchs. Um genauer zu sein, sehe ich mehr und mehr Live-Instanzen von UnmanagedMemoryStream
(Ich habe GC.Collect()
versucht, was offensichtlich nichts getan hat).
Nach einigen Tests habe ich festgestellt, dass dieses Problem nur auftritt, wenn ich die Schriftart TextBlock
wie folgt auf eine Ressourcenschriftart einstelle:
Ich habe versucht, die Eigenschaft Text
direkt aus dem Code oder über Binding zu aktualisieren, sie verhält sich für beide Arten gleich.
Unterm Strich:
Wenn FontFamily
gesetzt ist, kommen Instanzen von UnmanagedMemoryStream
immer wieder (für immer), wenn ich den Text aktualisiere. Wenn ich nicht (die Eigenschaft FontFamily
festlegen), ist der Speicher stabil.
(Übrigens passiert es, wenn ich auch Label
anstelle von TextBlock
verwende)
Es sieht aus wie ein Speicherleck, aber ich konnte keinen Hinweis darauf finden.
Irgendwelche Vorschläge, wie kann es gelöst werden?
A FontFamily
leckt UnmanagedMemoryStreams
, wenn es verwendet wird, wenn es von einer eingebetteten Ressource oder einem relativen Pfad stammt. Wenn FontFamily
aus einer Systemschrift oder einem absoluten Pfad stammt, ist es nicht undicht.
Sie können hier und lade das Projekt herunter, das das Problem reproduziert.
Workaround : Für Ressourcenschriftarten: Speichern Sie Schriftarten in einem temporären Ordner und verwenden Sie den absoluten Pfad zur gespeicherten Schriftart. Für Schriften mit relativer Pfadangabe: Auflösen und stattdessen den absoluten Pfad verwenden.