繁体   English   中英

二进制文件解析:性能

[英]Binary file parsing: performance

我有一个很大的二进制文件要解析,并且我不确定要使用哪种语言来提高性能。 最初,我将使用C#WPF作为GUI和ac DLL进行解析。 但我的目标PC是64位计算机。 而且我在VS 2008中无法设置ac DLL项目。因此,我在考虑是否应该使用c ++或c#进行解析。 我只是不确定c ++ / C#的文件读取速度,因为我的文件很大。 速度非常关键。 有人可以给我一些建议吗? 谢谢。

选择编写程序其余部分所用的任何语言。启动文件流并读取吸盘。

无论您使用什么代码,它都将一直在磁盘上等待到达数据的任何地方。

与其专注于语言(正如其他人提到的那样,效果不大),不如专注于方法。

通常,我建议使用文件映射(在新的MemoryMappedFile类的.NET 4.0中可用)。 除非您要执行单遍,仅前向扫描(可以使用常规流完成),否则这很好。

有一些提示,非托管代码可以传递到.NET中未公开的文件打开例程(特别是,通知缓存管理器您将随机或顺序访问文件)。 但是,缺少这些可能不会给您带来明显的性能影响。

由于您是Windows,由于出色的Overlapped IO API,因此与其他平台相比,Windows的生活要轻松一些。 如果您确实试图降低性能,这就是您要使用的。 IO重叠允许IO发生故障。 您会注意到FileStream实际上在后台使用了重叠的IO。 如果您可以在其限制范围内工作,那就使用它。 否则,请创建一个托管的c ++包装器,以使用ReadFile为您进行阅读。

这是正确方法的原因是磁盘IO应该是程序中最慢的部分。 如果没有其他访问磁盘的方式,则使用重叠的IO,您应该能够接近磁盘的吞吐量实际限制。 解码成数据结构应该很简单。 如果不是,则应重新检查如何解析数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM