Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 20:06   #1
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
Вопрос Нагрузка ОЗУ при скриншоте не активного окна

Hello, ребят, такой вопрос, делаю скриншот не активного окна, таким образом:
Код:
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                Graphics g = Graphics.FromHwnd(mHandle);
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height, g);
                Graphics memoryGraphics = Graphics.FromImage(bmp);
                IntPtr dc = memoryGraphics.GetHdc();
                bool success = PrintWindow(mHandle, dc, 0);
                memoryGraphics.ReleaseHdc(dc);
                pictureBox1.Image = bmp;

                Thread.Sleep(TimeSpan.FromMilliseconds(10));
            }
        }
Т.е. запускаю Background Worker, в нем соответственно запускаю цыкл, в котором собственно и происходит получение скриншота.
Проблема: Нагрузка на ОЗУ, летит кусками, периодически дропается, т.е. доходит до 230-250 мб, и падает до 50-70 мб, но в итоге достигает допустимого максимума (вплоть до 7.7-7.8 гб), и соответственно ни к чему хорошему это не приводит, при этом ЦП не грузит вообще (ну может быть 1-2% больше не замечал). Прошу указать на мою ошибку, или способ, как можно предотвратить таких нагрузок. Спасибо
SPLER вне форума Ответить с цитированием
Старый 10.04.2014, 20:23   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Следите внимательно за используемыми ресурсами. если что-то создали то после использования удалите.
Битмап например создали, а удалить забыли. вот в цикле и набирает гигабайты.
используйте оператор using() для графикса и для битмапа.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.04.2014, 20:34   #3
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

не много подробней можно? про размещение using.
SPLER вне форума Ответить с цитированием
Старый 10.04.2014, 20:55   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от SPLER Посмотреть сообщение
не много подробней можно? про размещение using.
хелп
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.04.2014, 21:04   #5
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

По поводу msdn понятно, спасибо, но подразумевался пример на моем коде, в прочем почитаю, попробую, еще раз спасибо.
SPLER вне форума Ответить с цитированием
Старый 10.04.2014, 21:18   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
using(Graphics g = Graphics.FromHwnd(mHandle))
using(Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height, g))
{
 // тут продолжение
}
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.04.2014, 21:30   #7
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 215
По умолчанию

а разве этим не гарбеч коллектор должен заниматься? я же не для того изучаю шарп чтобы иметь те же костыли по управлению памятью как допустим с дельфи или том же с++, тут же все юсер-френдли должно быть, я надеюсь что в следующих версиях шарпа это исправят.
IT-Lopata вне форума Ответить с цитированием
Старый 10.04.2014, 21:40   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от IT-Lopata Посмотреть сообщение
а разве этим не гарбеч коллектор должен заниматься? я же не для того изучаю шарп чтобы иметь те же костыли по управлению памятью как допустим с дельфи или том же с++, тут же все юсер-френдли должно быть, я надеюсь что в следующих версиях шарпа это исправят.
Изучайте WPF и вообще можете выключить голову. Там за вас коллектор все сделает. В программе должен быть порядок, если взял то положи на место. На с++ очень хорошо мозг тренировать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.04.2014, 22:30   #9
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

WorldMaster, еще раз благодарю, крайне признателен и за мсдн, и за пример на моем коде.
SPLER вне форума Ответить с цитированием
Старый 10.04.2014, 23:18   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

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

У вас оно память будет подчищать при завершении процесса, а пока вы в этой нити нужно следить за утечками и от языка это не зависит.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрин активного окна GrabbeR Общие вопросы Delphi 3 21.05.2012 15:28
определение активного окна DeDoK Общие вопросы Delphi 3 13.12.2010 19:07
Confirm при закрытии активного окна Jensi JavaScript, Ajax 4 17.08.2009 19:06
Поиск активного окна Arigato Win Api 5 22.11.2008 18:32