2
問題是關於內存映射文件 - 它幫助我實現更好的寫性能,如果我只需要保持附加數據到內存映射文件比較直接將文件寫入磁盤。C# - 將內存映射文件幫助我處理大量的數據,而沒有相當的性能下降
我的分析應用程序會生成大量數據,然後在完成所有輸入行的處理時結束彙總。
當我按順序處理輸入行時,我沒有任何問題,因爲在拾取下一個輸入行之前,我可以執行聚合並釋放輸出數據。
問題是當我並行處理輸入行時,我必須保留輸出數據直到完成所有輸入行。大約100K輸入行的輸出數據可能大到10GB。我使用serverGC,因此GC不會產生不利影響。 現在記住這一點,證明是一個挑戰。因爲輸入線可以高達500K。
所以下一個選擇是暫時把它寫到每個線程的磁盤上,並在最後讀取所有這些信息並進行聚合。但據猜測,由於磁盤寫入,證明其速度非常緩慢。
在這種情況下會使用內存映射文件幫助。 或者你是否建議其他任何選項,比如可能是一個懶惰地寫入磁盤的數據庫,所以應用程序沒有性能影響。
文件已由文件系統緩存進行內存映射。如果寫入是瓶頸,那麼MMF會使它更糟*,因爲它們將內存從緩存中移走。你需要購買更多的RAM。 – 2015-03-13 11:47:42
是的,這絕對是一個購買更多內存的選項,也可以將基於可用內存的邏輯放在一起,以便在內存中運行整個內存,或者根據需要使用磁盤。感謝您的答覆。 – Mouli 2015-03-14 18:12:46
我想數據是稀疏的。爲什麼不嘗試在進行聚合之前將其壓縮並存儲在RAM中? – 2015-03-16 15:52:54