我有一个很大的二进制文件来解析,并且我不确定要使用哪种语言来提高性能。最初,我打算使用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. 解析二进制文件时出错
- 2. Python:解析二进制STL文件
- 3. GAWK在Win7解析二进制文件
- 4. 解析Ruby中的二进制文件
- 5. python性能处理二进制文件
- 6. 性能读取二进制文件
- 7. .NET二进制文件读取性能
- 8. 二进制文件解释
- 9. Haskell二进制解析
- 10. 二进制日志文件分析
- 11. scala的解析器组合器可以解析二进制文件吗?
- 12. 使用boost :: spirit解析二进制文件时更改属性类型
- 13. 在.net项目上解析xlsx文件的二进制内容
- 14. 解析Ruby中的二进制CSV文件
- 15. 解析二进制文件的正则表达式?
- 16. 解析多组视频帧的原始二进制文件
- 17. 如何解析使用JavaScript和Ajax的二进制文件
- 18. C++,解析二进制注册表文件(regf)
- 19. 解析客户端JS中的二进制文件
- 20. 解析内容远离结构的二进制文件
- 21. 使用Haskell的Parsec解析二进制文件?
- 22. 使用boost :: iostreams逐字节解析二进制文件
- 23. 在PHP中解压二进制文件
- 24. 将.bmp文件解码为二进制
- 25. 了解二进制xls文件格式
- 26. 将二进制文件解释为ASCII
- 27. Windows二进制文件疑难解答
- 28. 解密文件的二进制格式
- 29. GCC编译的二进制文件给予 “不能执行二进制文件”
- 30. g ++编译的二进制文件给“不能执行二进制文件”
该语言几乎没有区别...... – 2010-06-29 01:15:19
......这被称为不必要的/过早的优化 – 2010-06-29 01:15:48
考虑到您列出的所有语言只是调用操作系统来执行文件I/O。 – 2010-06-29 01:18:13