我一直試圖解析一個directx .x文件,而不使用directX API來只加載模型的幾何。我第一次嘗試使用C++流,但解析一個800Kb文件花了差不多3秒。所以我試圖用C I/O函數做同樣的事情,現在需要大約120毫秒。 問題是,使用DX API加載相同的文件需要相同或幾乎相同的時間,但它也加載了所有內容,而不僅僅是幾何圖形。所以我認爲解析器的效率很低,那只是加載幾何。使用我注意到的大部分時間花費在fscanf()上的剖析器,我用它來分析頂點和索引。我也嘗試在緩衝區中獲取每一行,然後使用sscanf,但時間相同。我沒有使用STL。 有關如何快速解析避免使用fscanf的任何建議?請不要說「使用另一個類似Assimp的圖書館」,因爲我自己想這樣做。 在此先感謝。C/C++快速3D模型解析
回答
從掃描中分離讀取,例如,首先將整個文件讀入內存(或使用內存映射),然後使用sscanf或其他方法掃描(boost :: spirit,爲什麼不呢?)
我試着將整個文件加載到內存緩衝區,然後用sscanf處理它,但是sscanf的速度和fscanf一樣慢。我可以改進嗎?我試圖寫我自己的字符串分析器,但它有點慢。我真的不知道DX API如何處理文件加載/解析。也許多線程? – denidare
多線程不會在這裏工作,因爲沒有大批量的並行化。還有一件事要說明的是分析你的負載 - 你確定它是scanf,它佔用了大部分的CPU時間,而不是一些愚蠢的錯誤(例如,每個新元素的內存重新分配)? – Lyth
不,內存分配僅針對初始緩衝區,頂點和索引數組,僅對每個文件執行一次。我用自定義解析+自定義atof()替換了scanf,這加快了這個過程。現在需要大約50ms來處理同一個文件。 – denidare
- 1. 快速CSV解析
- 2. 快速解析(Tableview)
- 3. 在C#中的IFC快速模型解析器#
- 4. 快速解析數據
- 5. 快速解析字典
- 6. 快速解析內容PARAMS
- 7. JSON快速解析3
- 8. 快速模式解釋
- 9. 快速搜索解析數據3
- 10. 如何快速解析Json對象3
- 11. Python快速字符串解析,操作
- 12. 快速解析python中的大文件
- 13. 德爾福 - 快速(er)XML解析器
- 14. 按維護順序快速解析json
- 15. 快速,輕量級HTML解析器C++
- 16. 快速解析簡單的大文件
- 17. 解析和快速Geopoints不保存
- 18. 用於Matlab的快速JSON解析器
- 19. 試圖在swiftyJSON中快速解析JSON
- 20. Json解析快速應用程序
- 21. 解析文件的快速方法?
- 22. 優化CSV解析速度更快
- 23. 解析陣列PARAMS在快速
- 24. Outlook BCC不夠快速解析名稱?
- 25. 快速JSON解析(可能與超時)
- 26. 真正快速的C++ html解析器
- 27. 解析快速啓動與YUN
- 28. 的Java/Android的 - 快速的ByteBuffer解析
- 29. iOS快速解析推送通知
- 30. 錯誤=(錯誤?)無無快速解析
如果Assimp或任何其他開源庫做了你想要的,分析它看看爲什麼它比你的代碼更快。 –
感謝您的評論。我已經看了assimp的來源,但是作爲一個完整的加載庫,它很難找到代碼的相關部分。但我一定會再檢查一次,謝謝。 – denidare