Mein Problem ist, dass selbst nach dem Schließen des Formulars und der Pflege aller Verweise auf die Bilder, die wie folgt geladen wurden:
Code: Select all
ThingFile? imageFile = await ThingData.LoadFileAsync(Images[Index].ID);
ArgumentNullException.ThrowIfNull(imageFile);
try
{
if (ThingData.VerifyFile(imageFile) && imageFile.Content != null)
{
var imageData = imageFile.Content;
imageFile.Clear();
using var img = new MagickImage(imageData);
if (img.ColorSpace != ColorSpace.sRGB)
{
img.TransformColorSpace(ColorProfile.SRGB);
}
using var ms = new MemoryStream();
img.Write(ms, MagickFormat.Png32);
ms.Position = 0;
using var tempBitmap = new Bitmap(ms);
pictureBox.Image = (Bitmap)tempBitmap.Clone();
imageData = null;
}
else
{
ArgumentNullException.ThrowIfNull(pictureBox.ErrorImage);
pictureBox.Image = (Image)pictureBox.ErrorImage.Clone();
}
}
finally
{
imageFile = null;
}
Nach der Analyse der Speichernutzung mit dotMemory wurden beispielsweise 60 MB verwendet, der ImageViewer wurde verwendet und geschlossen, und (selbst nach dem Aufruf des GarbageCollector mit GC.Collect(); ) war der RAM auf 100 MB gestiegen. Die 40 MB wurden nicht nur nicht freigegeben, sondern gingen verloren, da eine erneute Wiederholung dazu führen würde, dass der RAM bei 140, dann bei 180 usw. wäre...
Mobile version