C# Ram Şişiyor
-
Merhaba hocalar. ekranın beli bir noktasını her saniye timer ile görüntüsünü kaydediyorum fakat bu kaydedilen görüntü ram'da toplanıyor ve rem şişiyor program hata veriyor.
bu kodların hata vermemsi için nasıl bir yol izlemeliyim ?
public void timer1_Tick(object sender, EventArgs e) { var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); var gfxScreenshot = Graphics.FromImage(bmpScreenshot); gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); Rectangle crop = new Rectangle(1388, 125, 40, 28); var bmp = new Bitmap(crop.Width, crop.Height); using (var gr = Graphics.FromImage(bmp)) { gr.DrawImage(bmpScreenshot, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel); } pictureBox1.Image = bmp; }
-
asagidaki kismi sil.
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
Bunlar bir yerde kullanilmiyor. gfxScreenshot objen dispose edilmedigi icin büyük ihtimalle tasma hatasi veriyor. Ama dedigim gibi kullanilmadigi icin silebilirsin.
-
Bitmap, gfxScreenshot gibi objelerin dispose larini cağirman gerekebilir. Timer ne kadar sıklık ile calisiyor ? GC'y, cağirmayi denediğinde memory kullanımın normale dönüyormu? Debuger ile bakmak gerekebilir.
-
unbalanced bunu yazdı
asagidaki kismi sil.
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
Bunlar bir yerde kullanilmiyor. gfxScreenshot objen dispose edilmedigi icin büyük ihtimalle tasma hatasi veriyor. Ama dedigim gibi kullanilmadigi icin silebilirsin.
Hocam sildim fakat ram sişmeye devam etti ve ekrana program resim çekmedi.
-
rakkoc bunu yazdı
Bitmap, gfxScreenshot gibi objelerin dispose larini cağirman gerekebilir. Timer ne kadar sıklık ile calisiyor ? GC'y, cağirmayi denediğinde memory kullanımın normale dönüyormu? Debuger ile bakmak gerekebilir.
Dün denedim hocam progrm açılır açılmaz kapantıyordu kendisini.
-
tamam hocam simdi gördüm bmpscreenshot a atiyormus kopyaladigini.. ben deneyeyim bakalim.
-
private void timer1_Tick(object sender, EventArgs e) { var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); using (var gfxScreenshot = Graphics.FromImage(bmpScreenshot)) { gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); Rectangle crop = new Rectangle(1388, 125, 40, 28); var bmp = new Bitmap(crop.Width, crop.Height); using (var gr = Graphics.FromImage(bmp)) { gr.DrawImage(bmpScreenshot, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel); } pictureBox1.Image = bmp; } bmpScreenshot.Dispose(); }
-
unbalanced bunu yazdı
private void timer1_Tick(object sender, EventArgs e) { var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); using (var gfxScreenshot = Graphics.FromImage(bmpScreenshot)) { gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); Rectangle crop = new Rectangle(1388, 125, 40, 28); var bmp = new Bitmap(crop.Width, crop.Height); using (var gr = Graphics.FromImage(bmp)) { gr.DrawImage(bmpScreenshot, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel); } pictureBox1.Image = bmp; } bmpScreenshot.Dispose(); }
oldu hocam ram 36 sabit teşekür ederim . eline sağlık