C # Bitmap и Graphic, проблемы с памятью и сохранение скриншотов в памяти - PullRequest
0 голосов
/ 09 октября 2019

Для начала, чтобы дать четкую картину.

В верхней части моего класса у меня есть:

Color FocusArea;
Bitmap FocusImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

и небольшая функция, чтобы делать скриншоты

private void Screenshot()
{
    Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    Graphics g = Graphics.FromImage(screenshot);
    g.CopyFromScreen(startscanx, startscany, 0, 0, scanarea, CopyPixelOperation.SourceCopy);
    g.Dispose();
    FocusImage = screenshot;
    //screenshot.Dispose(); // Shit happens when Disposing this one, wtf ?
}

Примерно через минуту (+ - от 3 до 6 снимков экрана в секунду) объем памяти увеличился до 4-10 ГБ и, очевидно, вылетает.

строка, которую он указывает при сбое:

Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

Я пытался избавиться от него после помещения скриншота в FocusImage, но затем сразу же вылетает при использовании ForusImage в моем приложении, я думаю, что я делаю что-то ужасное неправильно, я просто не могу понять, чтоно я надеюсь, что вы поможете мне указать, что я делаю неправильно?

1 Ответ

0 голосов
/ 09 октября 2019

Ответ пришел из комментария GSerg.

Прежде чем переназначить значение для FocusImage, мне пришлось сначала его утилизировать, похоже, это решает проблему, память хороша и стабильна при фиксированном значении.

[Редактировать] Поскольку кто-то был настолько спровоцирован, чтобы понизить мой вопрос, у меня возникло чувство, что я знаю, кто и почему, поэтому вот ответ на него:

Не было никаких сообщений об ошибках, он вылетал иэто было это. В этом отношении информация от визуальной студии, я полагаю, была из-за того, что на этой стадии мне не хватило памяти.

...