最近项目有个需求,需要比较两个任意大小文件的内容是否相同,要求如下:
项目是.NET CORE,所以使用C#进行编写比较方法
文件大小任意,所以不能将文件内容全部读入到内存中进行比较(更专业点说,需要使用非缓存的比较方式...那么优化的方向就变为了如何减少IO操作带来的损耗.
既然每次8个字节太少了,我们定义一个大一些的字节数组,比如1024个字节.每次读取1024个字节到数组中,然后进行字节数组的比较....Elapsed: 00:00:08.2174360
竟然比前两个都要慢(实际这也是所有方案中最慢的一个),LINQ的SequenceEqual看来不是为了效率而生....同样.NET CORE也在为了编写高性能代码而不断的优化中.
那么,我们如何继续优化我们的代码呢?...我突然想到在C# 7.2中加入的一个新的值类型: Span,它用来代表一段连续的内存区域,并提供一系列可操作该区域的方法.