WinForms Invoke / BeginInvoke - PullRequest
       11

WinForms Invoke / BeginInvoke

2 голосов
/ 17 февраля 2010

У меня есть форма C # win, где я читаю файл и показываю строки в сетке данных. Все работает нормально .. и я использую делегат и Invoke для отображения строк, как они читаются. Он также показывает индикатор выполнения и выполняет некоторые другие действия, например, вычисляет длину строки и анализирует строки, чтобы извлечь определенные поля из каждой строки.

Просто любопытно, если кто-нибудь пробовал такую ​​реализацию. В настоящее время мое приложение читает файл размером 250 МБ (имеющий ~ 12 000 строк) всего за 3 минуты (Win 7 32 бит / celeron 2.66 ГГц / 4 ГБ). Мне было интересно, можно ли сократить время - больше похоже, изменив способ, которым я его реализовал.

Ответы [ 4 ]

3 голосов
/ 17 февраля 2010

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

Лично я сомневаюсь, что когда-либо добавлю в список более 50 предметов. 100 вершин. Кроме того, это становится явной пыткой для человека.

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

1 голос
/ 17 февраля 2010

Хорошо ... Мне нравятся эти вопросы. Почему вы показываете пользователю 250 МБ данных в сетке данных? НЕТ СПОСОБА, чтобы конечный пользователь мог обрабатывать 250 МБ данных в сетке. Если конечный пользователь требует от вас использования этой функции, вам нужно обратиться к ней с точки зрения «это плохая идея». Проблемы с производительностью обычно могут быть решены в большинстве случаев путем обучения пользователя. : -D

0 голосов
/ 17 февраля 2010

Может быть, что-то вроде VirtualMode может вам помочь:

Виртуальный режим предназначен для использования с очень большими хранилищами данных. Когда свойство VirtualMode имеет значение true, вы создаете DataGridView с заданным количеством строк и столбцов, а затем обрабатываете событие CellValueNeeded для заполнения ячеек. Виртуальный режим требует реализации базового кэша данных для обработки заполнения, редактирования и удаления ячеек DataGridView на основе действий пользователя. Для получения дополнительной информации о реализации виртуального режима см. Как: реализовать виртуальный режим в элементе управления Windows Forms DataGridView .

P.S. О производительности: никто, кроме инструмента профилирования, не может помочь вам решить любые проблемы, связанные с производительностью.

0 голосов
/ 17 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...