Perbandingan fail ialah tugas asas dalam pengaturcaraan. Biasanya cara paling mudah ialah membaca data binari melalui FileStream dan membandingkannya bait demi bait. Tetapi adakah terdapat pendekatan yang lebih cekap dalam ekosistem .NET?
Alternatif yang menjanjikan kepada perbandingan bait demi bait ialah perbandingan checksum. Semakan seperti CRC (Cyclic Redundancy Check) boleh memberikan gambaran ringkas kandungan fail. Membandingkan dua checksum biasanya lebih cepat daripada membaca dan membandingkan keseluruhan fail.
Rangka Kerja .NET menyediakan beberapa perpustakaan yang boleh menghasilkan jumlah semak untuk fail. MD5 (Message Digest 5) ialah algoritma pencincangan yang biasa digunakan yang menghasilkan jumlah semak 128-bit. Anda boleh menggunakan kelas MD5CryptoServiceProvider untuk mengira jumlah semak MD5 fail.
Untuk menilai prestasi teknik perbandingan fail yang berbeza, pertimbangkan pelaksanaan berikut:
<code>static bool FilesAreEqual_OneByte(FileInfo first, FileInfo second) { // ... }</code>
<code>static bool FilesAreEqual_Hash(FileInfo first, FileInfo second) { // ... }</code>
<code>static bool FilesAreEqual(FileInfo first, FileInfo second) { // ... }</code>
Perbandingan bait demi bait yang dioptimumkan membaca dan membandingkan blok bait yang lebih besar (64 bait) pada satu masa, meningkatkan prestasi.
Ujian empirikal menggunakan fail video 100MB menghasilkan keputusan penanda aras berikut:
Keputusan ini menunjukkan bahawa walaupun perbandingan checksum memberikan prestasi terpantas, ia tidak selalunya sesuai kerana kemungkinan isu konflik. Perbandingan bait demi bait yang dioptimumkan memberikan pertukaran yang munasabah antara kelajuan dan ketepatan.
Atas ialah kandungan terperinci Adakah Terdapat Kaedah Perbandingan Fail yang Lebih Cekap Daripada Byte-by-Byte dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!