Cześć.
Pisze aplikację, która ma za zadanie wczytać sporą ilość dużych obrazków.
Aktualnie testuję sobie klasy sprawdzające obrazki pod różnymi względami (np czy są takie same itp.)
mam taki kod:
private void IsEqual()
{
using(Bitmap bmp1 = new Bitmap(5000, 5000, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (Bitmap bmp2 = new Bitmap(5000, 5000, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
Graphics g1 = Graphics.FromImage(bmp1);
g1.FillEllipse(new SolidBrush(Color.Black), 0, 0, 50, 50);
g = Graphics.FromImage(bmp2);
g.FillEllipse(new SolidBrush(Color.Black), 0, 0, 50, 50);
MemoryImage MemoryImg1 = new MemoryImage("Nowy", (Image)bmp1);
MemoryImage MemoryImg2 = new MemoryImage("Nowy", (Image)bmp2);
this.test.SaveTestResult(this.test.AreEqual(MemoryImg1, MemoryImg2), "IsEqual()");
g.Dispose();
}
}
}
Funkcja:
this.test.SaveTestResult(this.test.AreEqual(MemoryImg1, MemoryImg2), "IsEqual()");
zapisuje mi wynik porównania do logu, abym wiedział czy wszystko dobrze działa. Taki ala test.
Problem w tym, że kod ten pożera trochę pamięci fizycznej, ale tylko za pierwszym wywołaniem.
Oto przykład:
Przed wywołaniem kodu:
- Użycie pliku Stror = 792MB
- Dostępnej pamięci fizycznej = 2097940
po wywołaniu funkcji
- Użycie pliku Stror = 940MB
- Dostępnej pamięci fizycznej = 1947080
I teraz już niezależnie ile razy wywołam funkcję już tak pozostaje. Skąd ten pojedynczy pierwszy wyciek? A może to nie wyciek? Da się temu jakoś zapobiec?