1

MD5 ハッシュを作成する例として、マイクロソフトは次のコード サンプルを提供しています。

MSDN コード

// in Helpers class
public static string GetMd5Hash(MD5 md5Hash, string input)
{
    byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
    StringBuilder sBuilder = new StringBuilder(); 
    for (int i = 0; i < data.Length; i++)
    {
        sBuilder.Append(data[i].ToString("x2"));
    }
    return sBuilder.ToString();
}

それを使用すると、次のようになります

public string CreateHash(string str)
{
    using (var md5Hash = MD5.Create())
    {
        return Helpers.GetMd5Hash(md5Hash, str);
    }
}

マイコード

Microsoft が提供するコードを変更すると、ヘルパー メソッドの再利用が容易になると思いました。

// in Helpers class
public static string GetMd5Hash(string input)
{
    using (var md5Hash = MD5.Create())
    {
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
        StringBuilder sBuilder = new StringBuilder(); 
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }
}

したがって、それを再利用すると、結果として作成されるコード行が少なくなります。

public string CreateHash(string str)
{
    return Helpers.GetMd5Hash(str);
}

では、2 番目の例のようにそれを行わない目的は何ですか? 私の最初の考えは、MSDN が提供するコードを使用するプログラマーは、アンマネージ リソースを使用しているという事実(これは正しい用語ですか?)を常に認識しているのに対し、私の実装を使用した場合はそうではないということでした。

他の考えはありますか?

4

2 に答える 2

2

md5Hashのスコープでを再利用する場合は、MSDN コードの方が効率的です。CreateHash

于 2013-03-03T15:02:46.153 に答える
2

このmsdn のサンプルはCreateMD5クラスにさまざまなオーバーロードがあり、さまざまなハッシュ アルゴリズムを使用できるため、もう少し汎用的です。

彼らがそれをどのように使用しているかに注目してください。この関数を使用する人は誰でも、MD5 クラスの任意のインスタンスを提供でき、機能します。もちろん、私のコメントで述べたように、彼らのサンプルは通常完璧にはほど遠いものであり、私はあまり考えていませんが、そこに入れられています

于 2013-03-03T15:09:14.603 に答える