2010-02-17 31 views
2

我有一個C#win窗體,我讀取一個文件並在datagridview中顯示行。一切工作正常..我使用委託和調用顯示行正在讀取。它還顯示一個進度條,並執行一些其他工作,如計算行長度並解析行以從每行中提取某些字段。WinForms調用/ BeginInvoke

只是好奇,如果有人試過這種實現。目前我的應用程序在3分鐘內讀取一個250MB的文件(有12000行)(Win 7 32bit/celeron 2.66Ghz/4GB)。我想知道是否有可能縮短時間 - 更像是通過改變實施方式。

+2

你如何閱讀文件? – SLaks 2010-02-17 03:23:57

+0

你需要添加一些關於你如何實現它的任何有用建議的細節。 – 2010-02-17 03:40:53

+0

數據加載時需要實現datagrid視圖嗎?也許你可以顯示一個加載消息,並在加載數據後進行綁定。綁定容器列表時添加數據太慢了。 – Wilhelm 2010-02-17 03:48:10

回答

1

好的......我喜歡這些問題。爲什麼在數據網格中顯示一個用戶250MB的數據?最終用戶無法處理網格中的250MBs數據。如果最終用戶向你強制要求這個功能,那麼你需要從「這是一個壞主意」的角度來解決這個問題。性能問題通常可以通過教育用戶來解決。 :-D

+0

我在試着這樣的時候得到了答案:「我能理解你爲什麼說這是一個糟糕的主意,但我仍然希望它能夠和最好的表現一致。」 – Wilhelm 2010-02-17 03:46:41

+0

是的男人,然後你會被要求改變它後來大聲笑。 – Achilles 2010-02-17 03:58:02

3

那麼,你對這件事有第二個想法是完全正確的。可能最艱難的閱讀方式,托爾斯泰的戰爭與和平,大約有五十萬字。你傾倒在屏幕上的數量是上百倍。將這麼多信息放在屏幕上需要多長時間並不重要,它會讓用戶的瀏覽時間更長,甚至可以滾動瀏覽。

我個人毫不猶豫地把超過50個物品放在列表中。 100個上衣。除此之外,對於一個人來說,它變成純粹的折磨。

要達到此目的,請允許您的用戶過濾內容,然後逐漸向巨大結果集中鑽取相關項目。確切地說,應該看起來像什麼不清楚你的問題。想一想,我相信你會想出一些東西。

0

首先,您不需要加載整個文件,也不需要顯示它。您可以加載它的一部分進行顯示。即在網格中,無論如何您都無法顯示啓動文件,屏幕只有這麼大。考慮只加載顯示的內容(加上一些平滑滾動的額外行),並在用戶滾動內容時按需加載其餘行。用戶將不知道該文件僅部分加載。

如果您在財務類型應用程序中按帳戶或時間段在書中顯示某些邏輯分組,則更好。

0

也許像VirtualMode可以幫助你:

虛擬模式是設計用於數據非常大店。當VirtualMode屬性爲true時,您將創建一個具有一定行數和列數的DataGridView,然後處理CellValueNeeded事件以填充單元。虛擬模式需要實現基礎數據緩存,以根據用戶的操作處理羣體,編輯和刪除DataGridView單元。有關實施虛擬模式的更多信息,請參見How to: Implement Virtual Mode in the Windows Forms DataGridView Control

P.S.關於性能:除分析工具外,沒有人不能幫助您解決任何與性能相關的問題。