Очистка памяти - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Прошу сильно не пинать за, возможно идиотский вопрос, но решения не нашел. Попросили написать небольшую программу именно на шарпе, решил помочь и уткнулся в проблему. Сам то пишу на плюсах, там таких проблем не возникает. Собственно, небольшой кусок кода:
public Surface CaptureScreen()
{
            Bitmap bmp = null;
            Surface s = Surface.CreateOffscreenPlain(d, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.Scratch);
             d.GetFrontBufferData(0, s);
 
            bmp = new Bitmap(Surface.ToStream(s, SlimDX.Direct3D9.ImageFileFormat.Bmp));
 
            bmp.Dispose();  // ??? КАК?
 
            return s;
}
Не помогает ни null, ни Dispose(); Поскольку снятие скрина происходит часто, то программа умудряется отхватывать до 400 Мб, а потом чистит. bmp локален, нигде больше не светится. Есть ли человеческий способ удалить новый битмап. Не создавать битмап не вариант - другого метода переноса поверхности не нашел. Пробовал с мсдн
public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
так же не работает. Чего я не так делаю, или не понимаю? А и еще - может объем откусываемой памяти как то в настройках указывается - visual studio для мну новая, может там чего упускаю. Спасибо за внимание

Решение задачи: «Очистка памяти»

textual
Листинг программы
            Surface s = sc.CaptureScreen();
            var stream = Surface.ToStream(s, ImageFileFormat.Bmp);
            Bitmap bmp = new Bitmap(stream);
            stream.Dispose();
            s.Dispose();
            bmp.Dispose();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы