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.
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.
Rangka Kerja .NET termasuk beberapa perpustakaan untuk menghasilkan jumlah semak. Berikut ialah beberapa pilihan yang biasa digunakan:
Perpustakaan ini menyediakan kaedah yang mudah untuk mengira jumlah semak daripada tatasusunan bait atau aliran fail.
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>
Dengan membandingkan tatasusunan sebagai integer 64-bit, anda boleh mengurangkan bilangan perbandingan dengan faktor 8.
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!