我有一個非數據綁定的DGV(沒有數據源等;手動添加行)。爲了過濾它,我一直在循環中進行檢查,並適當地設置行的可見屬性。這對於較小的測試裝置來說效果很好,但在較大的測試裝置的性能上完全失敗。以5000 /秒過濾1k行。 10k行僅以〜250 /秒過濾。 50k只有40 /秒。我對發生的事情的假設是,每當我更改行可見性時,DGV都會重新生成顯示行的列表,將過濾進程轉換爲O(n^2)操作。篩選沒有數據綁定的DataGridView
儘管10k行表示用戶濫用系統,行爲不端的用戶需要考慮,所以我需要做一些不同的事情。有沒有更快的方法來篩選大量的行,而不使用數據綁定,或者我需要重新清除/重新創建所有行(對於合理數量的數據,這會顯着變慢)?
//psuedocode. runs slowly if more than a few thousand rows. foreach (DataGridViewRow row in myDGV) { row.Visible = CalculateFilter(row); }
爲什麼行必須手動生成?如果這是一個深層次的架構問題,可能沒有好的或快速的答案。 – Tom 2009-08-10 16:00:16
沒有提供數據源的數據庫。數據後端使用xml序列化將數據記錄存儲在「僞可識別」文件中,並將顯示值(從多個文件組合而成)作爲列表結構傳遞出來,每個結構包含單個DGV行的數據。 – 2009-08-10 16:06:43
感謝您指出。直到爲時已晚,我可能都不會意識到這一點。 – 2014-01-29 13:52:43