首頁 > 後端開發 > C++ > 如何比逐字節更有效地比較 .NET 中的檔案?

如何比逐字節更有效地比較 .NET 中的檔案?

DDD
發布: 2025-01-10 16:45:41
原創
497 人瀏覽過

How Can I Compare Files in .NET More Efficiently Than Byte-by-Byte?

.NET高效能文件比較方法

在.NET中比較兩個檔案可能非常耗時,尤其對於大型檔案而言。傳統的逐字節讀取二進位檔案並進行比較的方法效率低且速度慢。

替代方法

為了提升效能,請考慮以下替代方法:

檔案合併方法

一個出奇快的方法是將兩個檔案連接到單一位元組數組中,然後比較結果值。

<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++)
        {
            fs1.Read(one, 0, BYTES_TO_READ);
            fs2.Read(two, 0, BYTES_TO_READ);
            if (!one.SequenceEqual(two))
                return false;
        }
    }
    return true;
}</code>
登入後複製

校驗比較

另一種方法是使用校驗和演算法(例如CRC或MD5)產生每個檔案的指紋。比較這些指紋比比較整個檔案快得多。

<code class="language-csharp">static bool FilesAreEqual_Hash(FileInfo first, FileInfo second)
{
    byte[] firstHash = MD5.Create().ComputeHash(first.OpenRead());
    byte[] secondHash = MD5.Create().ComputeHash(second.OpenRead());

    for (int i = 0; i < firstHash.Length; i++)
    {
        if (firstHash[i] != secondHash[i])
            return false;
    }
    return true;
}</code>
登入後複製

效能比較

在大視訊檔案的測試中,檔案合併方法的效能大約是逐位元組比較方法的3倍,而雜湊比較速度更快,平均約為865毫秒。

最佳方法取決於您要比較的文件的大小和性質。但是,這些替代方法比傳統的逐字節比較方法提供了顯著的效能改進。

以上是如何比逐字節更有效地比較 .NET 中的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板