Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50

Большая нагрузка и тормоза при движении картинки по форме

09.09.2012, 09:13. Показов 3885. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу небольшую программку, большая часть интерфейса - это картинка с координатной плоскостью. Хотел сделать так, чтобы перекрестие всё время следовало за курсором мыши:
C#
1
2
3
4
5
6
7
8
9
10
11
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            pictureBox1.Image = pictureBox2.Image;
            Bitmap btmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.DrawToBitmap(btmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
            Image img = Image.FromHbitmap(btmp.GetHbitmap());
            Graphics gr = Graphics.FromImage(img);
            gr.FillRectangle(new SolidBrush(Color.Red), e.X, 0, 1, 600);
            gr.FillRectangle(new SolidBrush(Color.Red), 0, e.Y, 600, 1);
            pictureBox1.Image = img;
        }
Всё работает, но столкнулся со следующей проблемой: перекрестие не поспевает за курсором, при этом сильно грузится проц (почти на 100% двухъядерный на 3 ГГц!) и приложение отжирает почти 3 ГБ оперативы. Честно говоря, не пойму, чем вызвано такое поведение, подскажите, как сделать, чтобы нагрузка и использование памяти было более адекватным.

Добавлено через 12 минут
В качестве временной меры попробовал сделать установку перекрестия по клику - с каждым кликом используемая память увеличвается примерно на 8(!) мегабайт! Такое ощущение, что он где-то что-то ненужное хранит
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2012, 09:13
Ответы с готовыми решениями:

Медленная перерисовка формы при движении картинки в ее области
Хотел спросить на пример если поместить на форму картинку и сделать чтоб она перемещалась по форме она начинает лагать. как можно это...

Большая нагрузка ЦП
Вопрос в следующем: чем может быть вызвана большая нагрузка ЦП в winform приложении. На всех формах, кроме игровой - нагрузка менее 1% от...

Преобразование типов - большая нагрузка на ЦП
Здравствуйте. Пишу downloader, так сказать, менеджер закачки. Вычисляю while ((int)(readCount = DownloadStream.Read(buffer, 0,...

7
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
09.09.2012, 10:19
Незачем вам Image использовать - рисуйте напрямую:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public partial class Form1 : Form
{
    private readonly Pen Pen = new Pen(Brushes.Red);
    private Point lastMousePos;
 
    public Form1()
    {
        InitializeComponent();
        DoubleBuffered = true;
    }        
   
    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        lastMousePos = e.Location;
        Invalidate();
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.DrawLine(Pen, lastMousePos.X, 0, lastMousePos.X, 600);
        e.Graphics.DrawLine(Pen, 0, lastMousePos.Y, 600, lastMousePos.Y);
    }
}
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
09.09.2012, 10:36
canopen, Простите,а зачем вы переопределили методы?
Что бы лишний раз не подписываться,я правильно понял?
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
09.09.2012, 10:50
Ну, это выглядит красивее, чем когда объект (в данном случае форма) сам на свои события подписывается. Собственно, в том числе для этого все эти методы "On-что-то-там" и были придуманы - чтобы не было нужды подписываться на собственные события.
1
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
15.09.2012, 08:56  [ТС]
canopen, в принципе, всё работает; единственное - линии на самом pictureBox'e не рисовались, пришлось сделать его не видимым, а картинку с него перерисовать на форму:
C#
1
e.Graphics.DrawImage(pictureBox1.Image, pictureBox1.Location.X, pictureBox1.Location.Y);
Это правильно?

Ещё сейчас нужно написать координаты клика на картинке, раньше без проблем по клику рисовал на pictureBox'e, а сейчас как быть? В событии onClick e.Graphics уже не работает.
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
15.09.2012, 09:12
Цитата Сообщение от MYriad Посмотреть сообщение
Ещё сейчас нужно написать координаты клика на картинке, раньше без проблем по клику рисовал на pictureBox'e, а сейчас как быть? В событии onClick e.Graphics уже не работает.
Точно так же - в ОnClick запоминаете координаты и вызываете Invalidate(), а в OnPaint по запомненным координатам рисуете что нужно. Кстати, Invalidate можно вызывать с параметром (какая область формы изменилась), тогда перерисовываться будет не вся форма, а только указанная область (для повышения производительности).

А зачем вам вообще pictureBox нужен? Разве нельзя ее напрямую из ресурсов загрузить и сразу же выводить в OnPaint, минуя pictureBox?
1
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
15.09.2012, 09:45  [ТС]
canopen, просто в случае использования pictureBox'a у меня картинка засовывается сразу в exe'шник, а без него я не знаю, как это реализовать - использую Image.FromFile().
В остальном рисовании разобрался, спасибо)

Ещё можно вопрос новичка: что именно нам даёт модификатор override?
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
15.09.2012, 09:55
Цитата Сообщение от MYriad Посмотреть сообщение
что именно нам даёт модификатор override?
Без него программа не скомпилируется. Компилятор увидит, что такой же метод есть в родительском классе и не будет знать что вы хотите сделать - то ли переопределить родительский метод (в этом случае вы должны обозначить свои намерения через override), то ли создать новый, а родительский скрыть (в это случае указываете new).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2012, 09:55
Помогаю со студенческими работами здесь

Большая нагрузка на сетевые ресурсы
Здравствуйте, хотелось бы узнать, как можно уменьшить нагрузку на сетевые ресурсы пк, т.е. есть программа, которая скачивает txt с сервера,...

Слишком большая нагрузка на ЦП и ОЗУ от 10-1000 потоков
В общем есть у меня программа. работает в 10-1000 потоков(каждый поток-новый TcpClient). Так вот, при запуске программа начинает слишком...

Большая нагрузка PhantomJS на процессор, как исправить?
единственное , что грузит процессор это PhantomJs . Я его подключал для парсинга сайта . так вот он берет на себя 10-15% процессора , как...

Следы от эллипса на форме при его движении (как здесь поможет многопоточность?)
При движении эллипс оставляет следы на форме. Мне посоветовали использовать два потока. Цитирую слова: "Рисовать в основном...

Тормозит мышь, глючит тачпад на ноутбуке, тормоза звука при движении курсором
Добрый день. У меня возникла такая проблема: Имеется новый ноутбук Acer Aspire E5-571G. После включения компьютера, через некоторое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru