.NET 효율적인 파일 비교 방법
두 파일을 비교할 때 속도가 가장 중요한 경우가 많습니다. 파일을 바이트 단위로 읽는 기존 방법은 대용량 파일의 경우 시간이 많이 걸립니다. 이 문서에서는 체크섬 비교 및 사용자 지정 바이트 배열 비교를 포함하여 .NET에서 더 빠른 파일 비교를 수행하는 방법을 살펴봅니다.
체크섬 비교: 가능한 해결책?
체크섬 비교(예: 순환 중복 검사(CRC))는 각 파일에 대해 고유한 지문을 생성합니다. 이러한 지문을 비교하는 것은 전체 파일을 바이트 단위로 비교하는 것보다 빠릅니다. 그러나 체크섬은 잘못된 긍정을 생성할 수 있으므로 정확성을 보장하기 위해 추가 검사가 필요할 수 있다는 점에 유의하는 것이 중요합니다.
체크섬 비교 성능:
어떤 경우에는 체크섬 비교가 바이트별 비교보다 빠르지만 항상 최선의 솔루션은 아닙니다. 우리의 테스트에 따르면 MD5 해싱 알고리즘을 사용하면 비교가 항상 1초 미만 내에 완료될 수 있는 것으로 나타났습니다.
성능 최적화를 위해 바이트 배열 비교 사용자 정의:
바이트별 비교보다 성능이 훨씬 뛰어난 사용자 정의 바이트 배열 비교 방법을 제안합니다. 이 방법은 바이트 블록을 배열로 읽어와 배열 값을 정수로 비교합니다. 이 병렬화는 개별 바이트 비교의 오버헤드를 줄여줍니다.
바이트 배열 비교 코드 예:
const int BYTES_TO_READ = sizeof(Int64); static bool FilesAreEqual(FileInfo first, FileInfo second) { if (first.Length != second.Length) return false; if (string.Equals(first.FullName, second.FullName, StringComparison.OrdinalIgnoreCase)) return true; int iterations = (int)Math.Ceiling((double)first.Length / BYTES_TO_READ); using (FileStream fs1 = first.OpenRead()) using (FileStream fs2 = second.OpenRead()) { byte[] one = new byte[BYTES_TO_READ]; byte[] two = new byte[BYTES_TO_READ]; for (int i = 0; i < iterations; i++) { fs1.Read(one, 0, BYTES_TO_READ); fs2.Read(two, 0, BYTES_TO_READ); if (!one.SequenceEqual(two)) return false; } } return true; }
테스트 및 비교:
테스트에서 사용자 정의 바이트 배열 비교는 직접 바이트별 비교보다 거의 3배 더 나은 성능을 보였습니다. 해시 방식은 바이트 배열에 비해 속도가 느리지만 테스트에서는 항상 1초 이내에 완료될 수 있습니다.
파일 크기 및 정확도 요구 사항에 따라 적절한 파일 비교 방법을 선택하면 개발자는 .NET 애플리케이션에서 빠르고 효율적인 파일 비교를 달성할 수 있습니다.
위 내용은 .NET에서 효율적인 파일 비교를 달성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!