我必須處理大約200.000個對象(在桌面應用程序中),每個對象需要大約20毫秒才能處理。爲了加速這一點,我想同時做到這一點。使用任務並行庫進行計劃
對於測試,我只是把每個對象放在一個單獨的任務中,但由於工作量小,這隻會產生微小的速度提升。所以我的第一個問題是:
是否有一個巧妙的(但不是太複雜)的方式來找到這些對象的最佳批量大小?我想我可以進行一些本地測試,看它是否最快將它們分成10,20或100個對象進行分組,但這看起來有點不理想。其次(也是更重要的):大多數對象只要有一些CPU時間就應該被處理。但是,用戶將始終查看10-20個對象。我希望始終能夠將用戶正在查看的對象置於隊列的前端,以便提供流暢的用戶體驗。用戶可能會一直導航,所以我認爲始終能夠快速重新安排訂單非常重要。 (20 ms * 20應該能夠在大約0.4秒內處理)。
有人可以幫助我一個良好的設計模式來處理這些對象嗎?
你說的是什麼樣的處理?它是否受CPU限制? – svick
您可能需要定義_optimal_ wrt批量大小。最簡單的方法是:按核心/處理器數量劃分項目數量。總吞吐量是一個明顯的因素,但對用戶的響應也很重要;如果批量大小太大,那麼如果用戶想要查看恰好處於批次中的項目,則相關線程可能需要很長時間才能交付這些項目(除非線索將處理的項目遞送到較小的組中)。您的線程可以支持重新計劃,以便在必要時項目X..Y必須移至隊列頭部。 – groverboy
'隊列'是顯而易見的集合類,但它不支持重新計劃(除非使用像「SkipWhile」這樣的擴展方法)。或者,使用具有方法「AddRange」,「RemoveRange」的'List '。 –
groverboy