.NET: التخلص من كائن hashalgorithm
-
11-09-2019 - |
سؤال
الكائنات التي تستمد من HAFALGORITHM مثل MD5CryptoServiceProvider لها طريقة تخلص ()، لكنها خاصة. بدلا من ذلك، له طريقة واضحة () والتي "تصدر كل الموارد" المستخدمة من قبل ذلك.
ماهذا الهراء؟
هل هذا كيفية التخلص من التخلص من الحاشدة بعد ذلك؟
var hasher = new MD5CryptoServiceProvider();
byte[] hashCode = hasher.ComputeHash(data);
hasher.Clear();
شخص ما يريد شرح هذا واحد بالنسبة لي؟ :)
المحلول
تبحث مع العاكس، Clear
طريقة HashAlgorithm
ما عليك سوى المكالمات الخاصة Dispose
طريقة. سبب تعريض طريقة باسم Clear
ربما كان فقط أن مصممي الفصل يعتقدون أنه سيكون اسما أكثر ملاءمة لخوارزمية التجزئة. ترى أنماط مماثلة داخل أجزاء أخرى من BCL، مثل Close
بالنسبة System.IO.Stream
. وبعد أيضا، أفضل الممارسات هنا هي استخدام using
كتلة، والتي سوف تسميها تلقائيا Dispose
الطريقة عندما انتهت.
نصائح أخرى
بينما ال Dipose()
الطريقة خاصة، إذا قمت بإلقاء ذلك IDisposable
يمكنك الوصول إليها. كما قال آخرون، رغم ذلك، Clear()
سوف نسميها لك.
ومع ذلك، فإن النهج الأفضل هو إحاطة إعلان ومتغير المتغير في كتلة باستخدام ():
byte[] hashCode;
using(var hasher = new MD5CryptoServiceProvider())
{
hashCode = hasher.ComputeHash(data);
}
يجب أن تدع مقبض GC من أجلك. هذه هي الوظيفة.
يجب التخلص منها بعض الموارد، مثل اتصالات DB ومقابض الملفات، لذلك ضع تلك الموجودة في using
كتلة (C #). هذه ليست واحدة من تلك الحالات، رغم ذلك.