> 백엔드 개발 > C++ > 체크섬 및 청크 비교를 통해 .NET에서 파일 비교 속도를 높일 수 있습니까?

체크섬 및 청크 비교를 통해 .NET에서 파일 비교 속도를 높일 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-10 16:33:44
원래의
173명이 탐색했습니다.

Can Checksumming and Chunk Comparison Speed Up File Comparison in .NET?

.NET 효율적인 파일 비교 기술

파일을 바이트 단위로 비교하는 것은 일반적인 방법이지만 비효율적입니다. 이 문서에서는 파일을 비교하는 더 빠른 방법을 살펴보고 체크섬 생성을 위해 .NET의 라이브러리를 소개합니다.

체크섬 비교를 통해 속도가 향상될 수 있나요?

예, 체크섬 비교를 위해 CRC와 같은 알고리즘을 사용하는 것이 바이트별 방법보다 빠릅니다. 체크섬은 각 파일에 대해 고유한 서명을 생성하므로 전체 파일이 아닌 서명을 비교할 수 있습니다.

.NET 파일 체크섬 생성 라이브러리

여러 .NET 라이브러리는 파일 체크섬 생성 기능을 제공합니다.

  • System.Security.Cryptography.MD5: 파일의 MD5 체크섬을 생성합니다.
  • System.Security.Cryptography.SHA1: 파일의 SHA1 체크섬을 계산합니다.
  • System.Security.Cryptography.SHA256: 파일의 SHA256 체크섬을 계산합니다.
  • System.Security.Cryptography.SHA512: 파일의 SHA512 체크섬을 생성합니다.

최적화된 비교방법

해싱은 빠른 방법이지만 큰 바이트 청크를 읽고 숫자로 비교하는 방법을 사용하면 파일 비교를 더욱 최적화할 수 있습니다.

<code class="language-csharp">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++)
        {
            int read1 = fs1.Read(one, 0, BYTES_TO_READ);
            int read2 = fs2.Read(two, 0, BYTES_TO_READ);

            if (read1 != read2 || !one.SequenceEqual(two))
                return false;
        }
    }

    return true;
}</code>
로그인 후 복사

성능 테스트 결과

성능 테스트에 따르면 대용량 파일(예: 100MB 비디오 파일)의 경우 파일 블록을 숫자로 비교하는 것이 바이트별 비교 및 ​​해시보다 성능이 뛰어난 것으로 나타났습니다.

  • 블록 비교: 1063ms
  • 바이트별 비교: 3031ms
  • 해시: 865ms

작은 파일의 경우 일반적으로 해싱은 최적화된 특성으로 인해 더 빠릅니다. 그러나 대용량 파일의 경우 전체 파일을 읽고 처리하는 오버헤드가 클 수 있으며 블록 비교 방법이 더 빠릅니다.

위 내용은 체크섬 및 청크 비교를 통해 .NET에서 파일 비교 속도를 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿