Этот код работает каждые 100 мс. Использование памяти просто увеличивается до тех пор, пока оно не достигнет 1,5 ГБ, а затем оно сработает.Утечка памяти в приложении SharpDX
void takeScreenShot()
{
Surface s;
s = CaptureScreen();
pictureBox1.Image = new Bitmap(Surface.ToStream(s, ImageFileFormat.Bmp));
s.Dispose();
}
public Surface CaptureScreen()
{
int width = Screen.PrimaryScreen.Bounds.Width;
int height = Screen.PrimaryScreen.Bounds.Height;
Device device = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing, new PresentParameters(width, height));
DisplayMode disp = device.GetDisplayMode(0);
Surface s = Surface.CreateOffscreenPlain(device, disp.Width, disp.Height, Format.A8R8G8B8, Pool.Scratch);
device.GetFrontBufferData(0, s);
return s;
}
Нельзя ли повторно использовать некоторые из объектов в методе 'CaptureScreen'? Как «Устройство» и «Поверхность»? Что происходит, когда он падает? Вы получаете исключение или какую-то другую обратную связь? – scheien
Возможный дубликат [Поиск утечек памяти в управляемом приложении метро Win8?] (Http://stackoverflow.com/questions/9995164/finding-memory-leaks-in-a-managed-win8-metro-app) – Xstian
if (pictureBox1.Image! = null) pictureBox1.Image.Dispose(); –