我有一個很大的二進制文件來解析,並且我不確定要使用哪種語言來提高性能。最初,我打算使用C#WPF作爲GUI,並使用c DLL來進行解析。但我的目標PC是64位機器。並且我在VS 2008中設置了一個c DLL項目時遇到了麻煩。所以我想如果我應該移動到C++或c#來執行解析。我只是不確定C++/C#的文件讀取速度,因爲我的文件非常大。速度非常關鍵。任何人都可以給我一些建議嗎? 謝謝。二進制文件解析:性能
回答
而不是專注於語言(其他人已經提到過,其效果不大),重點放在方法上。
一般來說,我建議使用文件映射(可在.NET 4.0中的新MemoryMappedFile
類中使用)。這是很好的,除非你正在進行單向掃描,只能使用正向流掃描。
有一些提示,非託管代碼可以傳遞給未在.NET中公開的文件打開例程(具體來說,通知緩存管理器您將隨機或按順序訪問文件)。但是,這些缺乏可能不會給您帶來明顯的性能影響。
選擇你編寫程序其餘部分的任何語言。啓動文件流並讀取吸盤。
無論您使用的代碼如何,它仍然會在磁盤上等待數據到達任何地方。
既然你是windows,由於出色的Overlapped IO API,生活比其他平臺更容易一些。如果你真的試圖壓縮性能,這就是你想要使用的。重疊的IO允許IO不按順序發生。你會注意到FileStream實際上使用了重疊的IO。如果你可以在其限制內工作,那麼就使用它。否則,請創建一個託管C++包裝器,以使用ReadFile爲您讀取數據。
這是正確方法的原因是磁盤IO應該是程序最慢的部分。如果沒有其他訪問磁盤的情況下使用重疊IO,您應該能夠接近磁盤實際的吞吐量限制。解碼成數據結構應該是微不足道的。如果不是,你應該重新審視你如何解析數據。
我同意重疊的I/O是好的(第二個文件映射),但爲了得到一個重疊的'FileStream',你*有*使用一個帶有布爾'async'參數並傳遞'true'的構造函數。 'File.Open',et。人。不要使用重疊的I/O。 – 2010-06-29 02:22:19
我會問一些我認識的人,但我懷疑mem映射文件在引擎蓋下使用了重疊的I/O。 – 2010-06-29 15:09:48
否;內存映射文件是一種非常不同的方法。 [Windows Internals](http://tinyurl.com/23seaj8)詳細介紹了各種I/O方法的工作原理。 – 2010-06-29 16:06:45
- 1. 使用Powershell解析二進制文件
- 2. GAWK在Win7解析二進制文件
- 3. Python:解析二進制STL文件
- 4. Matlab解析二進制文件
- 5. 解析Ruby中的二進制文件
- 6. 解析二進制文件時出錯
- 7. 二進制文件讀取性能C++
- 8. 性能讀取二進制文件
- 9. .NET二進制文件讀取性能
- 10. 二進制文件生成性能
- 11. python性能處理二進制文件
- 12. 二進制文件解釋
- 13. C++解析二進制plist
- 14. 二進制包解析
- 15. Haskell二進制解析
- 16. 解析二進制到十進制
- 17. 給我一個二進制解析器。二進制數據解析器
- 18. 解析複製...二進制結果
- 19. 二進制日誌文件分析
- 20. scala的解析器組合器可以解析二進制文件嗎?
- 21. 使用boost :: spirit解析二進制文件時更改屬性類型
- 22. python - 使用結構解析二進制文件中的數據
- 23. 解析客戶端JS中的二進制文件
- 24. 如何從二進制文件解析4位塊?
- 25. C++,解析二進制註冊表文件(regf)
- 26. 如何使用fscanf解析二進制文件
- 27. 使用Haskell的Parsec解析二進制文件?
- 28. 使用boost :: iostreams逐字節解析二進制文件
- 29. 閱讀遠程二進制文件解析
- 30. 解析二進制文件需要的幫助
該語言幾乎沒有區別...... – 2010-06-29 01:15:19
......這被稱爲不必要的/過早的優化 – 2010-06-29 01:15:48
考慮到您列出的所有語言只是調用操作系統來執行文件I/O。 – 2010-06-29 01:18:13