2016-09-21 62 views
0

比方說,我有一個相同類對象的列表打包成一個文件,我保存到/從應用程序啓動加載。異步用法加載/保存對象列表到文件

我想要做的是使用異步處理的功能來加速加載 - 所有時間&節省所有時間 - 我們還假設文件本身被高效打包(使用協議緩衝區等)。

什麼是最好的方式去做這件事?在這種情況下,異步處理會有幫助嗎?

我想到的一種方法是通過選取大於1的數字,將列表除以該數字,然後使用該數字作爲任務數量來保存/加載,從而「預先確定」分塊的數量。然而,這似乎有點武斷,我很好奇,如果有一些圖書館可能只是根據一些條件爲我做出決定。

I.e.我會叫我「chunkable名單」是這樣的:

Chunkable<List<SomeObject>> 

..然後該程序將只瓜分列表正確的讀/保存以高效的方式 - 例如保存10個文件,如「List_01」,「List_XX」 - 然後在執行加載全部時從塊中讀取。

保存或加載時列表的最終排序並不重要 - 只需將對象作爲單個列表提供即可。

+0

瓶頸實際上是CPU還是IO?因爲將IO分佈到多個文件中可能不會加快速度...... –

+0

一個有用的評論,在我想到的我不確定的示例中 - 但是出於參數的原因,我們假設它是CPU - 也就是說,一些合理數量的處理將序列化格式轉換回大塊對象。 – Coruscate5

+0

您可能需要查看任務並行庫(Parallel.ForEach等)以及TPL數據流。 –

回答

0

對於後代,這裏的一個概念性答案是在任務並行庫中使用分區器。

爲了節省,我可以讓分區程序序列化&列表中的文件作爲完成任務的非重複格式的任務。

對於裝載,我可以在磁盤上的指定位置的現有區塊的計數/列表,然後有TPL加載&反序列化所有塊&重組他們在他們完成(使用一些互鎖任何順序var來確保每個文件只被讀取一次)。

一旦我測試了一些,我會在這裏粘貼代碼。