将内存流与文件C#.NET进行比较的最有效方法

前端之家收集整理的这篇文章主要介绍了将内存流与文件C#.NET进行比较的最有效方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个MemoryStream包含PNG编码图像的字节,并想检查磁盘上的目录中是否有完全相同的图像数据.第一个显而易见的步骤是只查找与确切长度匹配的文件,但在此之后我想知道将内存与文件进行比较的最有效方法是什么.我在使用溪流时不是很有经验.

我对此事有几点想法:

首先,如果我能得到文件的哈希码,那么(可能)比较哈希码而不是图像的每个字节都会更有效.同样,我可以比较图像的一些字节,给出“足够接近”的答案.

然后当然我可以比较整个流,但我不知道会有多快.

将MemoryStream与文件进行比较的最佳方法是什么? for循环中逐字节的字节?

解决方法

首先,获取两个流的哈希码无济于事 – 计算哈希码时,您需要读取整个内容并在读取时执行一些简单的计算.如果您逐个字节地比较文件或使用缓冲区,那么您可以提前停止(在找到前两个字节/块之后)不匹配.

但是,如果您需要将MemoryStream与多个文件进行比较,这种方法是有意义的,因为那时您只需要遍历MemoryStream一次(计算哈希码)并循环遍历所有文件.

在任何情况下,您都必须编写代码来读取整个文件.正如您所提到的,这可以是逐字节或使用缓冲区完成的.将数据读入缓冲区是一个好主意,因为从HDD读取时可能是更有效的操作(例如,读取1kB缓冲区).此外,如果需要并行处理多个文件,可以使用异步BeginRead方法.

摘要

>如果需要比较多个文件,请使用哈希码
>读取/比较单个文件内容

>从两个流中读取1kB数据到缓冲区
>看看是否有差异(如果是,退出)
>继续循环

如果需要并行处理多个文件,请使用BeginRead异步实现上述步骤.

猜你在找的C#相关文章