我有一個正在處理大型數據集的進程,處理Parallel.ForEach
中的記錄,然後將結果存儲在ConcurrentQueue<List<string>>
中。因此處理記錄,記錄中的每個字段都會生成一個字符串,然後將其添加到List
。在List
然後是Enqueued
的記錄末尾,並且進一步處理在保存所有處理的記錄的ConcurrentQueue
上完成。大型不確定數據集的可伸縮集合
經過幾個小時的處理後,我注意到我的CPU使用率已經從一個新的浪潮中保持很高的水平,並且處理一組記錄的時間開始增加。
我在這裏的假設是List
被填充到容量然後複製到一個新的更大List
。隨着CPU容量的不斷增大,初始化週期也在不斷增長。我正在使用的數據集大小不確定,因爲每個記錄都有可變數量的子記錄。家長記錄的數量通常在500k左右。
所以我的第一個想法是將List
初始化爲父記錄的Count
。由於兒童記錄,List
仍然必須增長,但它至少必須增長更少的次數。但有沒有其他一些替代List
的替代品可以更好地擴展?或者比我的第一個本能更好的方法?
相關知識介紹ConcurrentQueue。我會提示檢查字符串本身(這是我剛纔得到的代碼庫,現在它正在掙扎)。列表上容量的設置絕對是可行的,因爲字段數在記錄中是靜態的。 – bcwiniger
在這種情況下,每個記錄使用一個數組而不是一個列表(稍微快一點) –