Производительность DataGridView - зависит ли она от видеокарты? - PullRequest
3 голосов
/ 11 августа 2009

У меня есть приложение на C # / .Net, которое, по-видимому, использует большую часть своего процессорного времени для обновления DataGridView. Я вручную обновляю данные примерно каждые 1,5 секунды, обновляя только те данные, которые изменились. В итоге получается около 250 обновлений каждые 1,5 секунды. Я хотел бы уменьшить эти 1,5 секунды до гораздо меньшего числа (возможно, 0,5 секунды). Я профилировал и оптимизировал столько, сколько смог, и хотя производительность в порядке, я бы хотел, чтобы она была быстрее.

У меня такой вопрос, будет ли обновление видеокарты с Nvidia FX1800 до Nvidia FX3800 значительно ускоряться?

Ответы [ 4 ]

1 голос
/ 11 августа 2009

Ваше время почти наверняка потрачено не на рисование экрана, а на обновление внутреннего представления данных, поэтому нет, это не поможет.

EDIT:

Чтобы узнать, на что тратится время, загляните в профилировщик. Я лично предпочитаю один из Красные Ворота

1 голос
/ 11 августа 2009

Моя кишка говорит "Нет".

Время ЦП не является временем ГП. Если ваш процессор занят обновлением представления, вам может потребоваться изменить систему на более дружественную к процессору. Похоже, он загружен не лениво и получает все данные и все обновления. Насколько велик ваш диапазон ценностей? Если у вас нет много значений, это может быть хорошо. Я подозреваю, что у вас есть большое количество значений, и он поддерживает весь список в памяти. Это плохо по нескольким причинам. Это занимает много памяти, вам нужно обратить внимание на все изменения (не только те, которые влияют на ваш текущий дисплей), это много контента, чтобы перемещаться и обновлять.

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

Видеокарта, которая у вас есть, должна отображать изображение за очень небольшую долю секунды. Попробуйте захватить приложение и дико перемещать его по экрану. Это даст вам представление о том, как быстро оно может быть обновлено (да, не совсем точно, поскольку оно, вероятно, кэшируется).

Насколько велик твой список?

Jacob

1 голос
/ 11 августа 2009

Операция GDI + не сильно зависит от графического процессора, поскольку она использует только базовую ускоренную операцию, которую поддерживает каждая графическая карта (линии, прямоугольники и т. Д.).

Я полагаю, что проблема в том, что вы не «скрываете» управление во время обновлений. Проверьте методы BeginUpdate / EndUpdate, если они доступны. Если нет, установка видимого на false, обновление и настройка видимого на true может когда-нибудь решить проблему.

0 голосов
/ 11 августа 2009

Я использовал DataGridView, представляющий список из 1000 элементов в приложении, в котором данные (и под этим я имею в виду весь список) обновляются каждые 50 мс практически без каких-либо потерь производительности. Поэтому я не верю, что то, что вы хотите сделать, это слишком много для DataGridView.
Как предлагает Эрик Дж., Вам следует профилировать свой код, я уверен, что вы обнаружите, что ваша проблема с производительностью происходит из другого места в коде.

...