Rumah > pembangunan bahagian belakang > C++ > Apakah Cara Terpantas untuk Membandingkan Dua Fail dalam .NET?

Apakah Cara Terpantas untuk Membandingkan Dua Fail dalam .NET?

Patricia Arquette
Lepaskan: 2025-01-10 16:41:45
asal
393 orang telah melayarinya

What's the Fastest Way to Compare Two Files in .NET?

Cara membandingkan dua fail dengan cekap dalam .NET

Perbandingan fail ialah tugas biasa dan memilih kaedah yang paling berkesan adalah penting. Artikel ini akan meneroka kaedah perbandingan fail yang berbeza, memfokuskan pada pengoptimuman prestasi.

Perbandingan bait dan perbandingan checksum

Kaedah perbandingan fail yang paling asas ialah membaca fail ke dalam memori sebagai tatasusunan bait dan kemudian membandingkannya bait demi bait. Walaupun kaedah ini mudah dan mudah, ia juga paling perlahan. Pendekatan yang lebih cekap ialah menggunakan perbandingan checksum seperti CRC32 atau MD5, yang menjana cap jari yang unik untuk setiap fail. Dengan membandingkan jumlah semak dan bukannya keseluruhan kandungan fail, masa pemprosesan boleh dikurangkan dengan ketara.

Pustaka penjanaan .NET checksum

Rangka Kerja .NET termasuk beberapa perpustakaan untuk menghasilkan jumlah semak. Berikut ialah beberapa pilihan yang biasa digunakan:

  • System.Security.Cryptography.CRC32
  • System.Security.Cryptography.MD5
  • Sistem.Keselamatan.Kriptografi.SHA1

Perpustakaan ini menyediakan kaedah yang mudah untuk mengira jumlah semak daripada tatasusunan bait atau aliran fail.

Perbandingan tatasusunan dioptimumkan

Jika anda memerlukan prestasi maksimum dan tidak dapat mengelakkan perbandingan bait demi bait, anda boleh mengoptimumkannya dengan menggunakan tatasusunan dan bukannya bait individu. Dengan membaca ketulan data ke dalam tatasusunan saiz tertentu (contohnya, 64 bait), anda boleh mengurangkan bilangan perbandingan dan meningkatkan kecekapan.

Pertimbangkan coretan kod C# berikut, yang menggunakan perbandingan tatasusunan yang dioptimumkan untuk membandingkan dua fail:

<code class="language-c#">const int BYTES_TO_READ = 64;

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>
Salin selepas log masuk

Dengan membandingkan tatasusunan sebagai integer 64-bit, anda boleh mengurangkan bilangan perbandingan dengan faktor 8.

Kesimpulan

Cara terbaik untuk membandingkan fail dalam .NET bergantung pada prestasi dan keperluan ketepatan senario tertentu anda. Untuk senario berprestasi tinggi, adalah disyorkan untuk menggunakan perbandingan tatasusunan yang dioptimumkan atau perbandingan semak. Untuk senario yang memerlukan perbandingan bait demi bait, menggunakan tatasusunan boleh meningkatkan kecekapan.

Atas ialah kandungan terperinci Apakah Cara Terpantas untuk Membandingkan Dua Fail dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan