DataGridView Оптимизация производительности с помощью подкачки - PullRequest
0 голосов
/ 05 августа 2011

В моем приложении Datagridview отображает объект Proxy

  • Прокси имеет два свойства Адрес, Статус

  • DataGridview привязан к List, который содержит объекты Proxy.

  • DataGridView и пользовательский интерфейс становятся не отвечающими из-за большой нагрузки на память, так как список достигает 1 миллиона прокси-серверов.

  • Приложение собирает прокси с разных сайтов, как мне масштабировать приложение для обработки огромных списков.

Мое беспокойство - сбор урожая и одновременная реализация пейджинга.

Пейджинг с SQLCe , это хорошее решение ?? Или замедлит процесс уборки, или есть лучшее решение, я не знаю.

приложение собирает около 500 - 1700 прокси в секунду, это функция для извлечения " как можно быстрее ", теперь у меня есть другие очевидные ограничения, узкие места, но я их игнорирую на данный момент.

Пожалуйста, посоветуйте, как мне сохранить скорость и сделать ее масштабной, лучшие практики. , я не уверен насчет SQLCe

Ответы [ 2 ]

1 голос
/ 05 августа 2011

А с чего бы вам когда-либо хотеть показать 1 миллион записей пользователю ?! Даже если он разбит на страницы, ему все равно придется пролистать, скажем, 10000 страниц!

Реализовать фильтрацию, отображать только то, что необходимо и ограничить ее до 7 записей. Добавить float Score к Proxy; выразить это в процентах - 0% означает, что google.com вообще не загружался, 100% означает отсутствие замедления по сравнению с прямым подключением (хаха).

Тогда это

var displayedProxies = myProxies.OrderByDescending(Score).Take(7);

Подумайте о возможных сценариях использования и приведите пользовательский интерфейс в соответствие. Например, если он нацелен на спамеров, желающих отправить миллиарды электронных писем, вам просто нужна одна кнопка - «Экспорт в (имя для машиночитаемого формата здесь)». Однако, если какой-то пользователь хочет анонимно просматривать веб-страницы, вы можете дать ему список «7 случайных прокси» с сообщением, что результаты обновляются. Затем просто замените эти 7 случайных в режиме реального времени на список 7 лучших из найденных на данный момент.

0 голосов
/ 05 августа 2011

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

Если к сетке применяются фильтры, я бы также передал их в сохраненный процесс.

Я бы отключил VIEWSTATE в сетке данных, если вы все еще пропускаете много записей (скажем, более тысячи на страницу);на самом деле, если у вас слишком много записей и вы хотите, чтобы эта штука летела, я бы предпочел сочетание вызовов ajax с веб-службой для получения данных в сочетании с плагином jquery datatables, который я считаю фантастическим и довольно хорошо документированным. Вот ссылка.

Редактировать: Если вы используете подход jquery datatables / webservice, постарайтесь убедить людей не использовать IE версии <9. IE Javascript engine отстойв IE 6 и 7 и менее в IE8, но все еще довольно плохо по сравнению с FF, Chrome и т. д. </p>

...