c# - 最快读取二进制文件读写

标签 c# file parsing

我正在编写一个应用程序来读取和解析大小可能为 1 KB 到 200 MB 的文件。

我必须解析它两次...

  1. 提取文件中包含的图像。

  2. 解析该图像以提取图像的内容。

我通常使用文件流、缓冲流、二进制读取器和二进制写入器来读取和写入内容。

现在,我想知道读取文件和提取内容的最快和最有效的方法...

有没有好的方法或者好的类库?

注意:不安全的代码是可以的!

最佳答案

读取文件最快最简单的方法就是:

var file = File.ReadAllBytes(fileName);

这会将整个文件作为字节数组读入内存。然后您可以通过它以内存阵列访问速度(也就是说,非常快)寻找您需要的东西。这几乎肯定比在您阅读文件时尝试处理文件要快。

但是,如果此文件不能很好地放入内存(81 MB 可以),那么您将需要分块执行此操作。如果不需要,我们可以安全地避免这种棘手的讨论。这种情况下的解决方案是:

  1. 如果使用 .NET 4.0,请使用 memory mapped files (更多内容在 What are the advantages of memory-mapped files? 中)。

  2. 如果没有,您将需要分块读取、缓存并保留您认为需要在内存中的内容(为了提高效率)或重新读取它,您根本无法将其保留在内存中。这可能会变得困惑和缓慢。

关于c# - 最快读取二进制文件读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10239207/

相关文章:

c# - 来自动态代码的异常堆栈跟踪中的文件路径和行号错误

python - 在不更改目录的情况下写入 Python 中的新目录

c - #include 在嵌入的头文件中

python - 是否有任何 xml 解析器允许在 python 中按路径添加元素

java - 通过 DOM 解析器编辑 BIG XML

c# - 字典 <string,string> 使用 Automapper 映射到一个对象

c# - C#编译器相关的对象引用未设置为对象的实例

python - 替换多余的空格以格式化 csv

c# - Compact Framework 的脚本库

Python UTF-16 编码十六进制表示