سؤال

وأستخدمه البرمجية التالية لحساب MD5SUM ملف -

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

وهذا يعمل بشكل جيد عادة، ولكن إذا واجهت ملف كبير (~ 1GB) - على سبيل المثال صورة ايزو أو ملف VOB DVD - أحصل على الخروج من استثناء الذاكرة

.

ورغم ذلك، وأنا قادرة على حساب MD5SUM في سيغوين لنفس الملف في حوالي 10secs.

يرجى أقترح كيف يمكنني الحصول على هذا العمل لملفات كبيرة في برنامجي.

والشكر

هل كانت مفيدة؟

المحلول

وأقترح باستخدام أسلوب بديل:

MD5CryptoServiceProvider.ComputeHash(Stream)

وويمر في مدخلا فتح تيار في الملف الخاص بك. وهذه الطريقة سوف يكاد يكون من المؤكد لا قراءة في الملف بأكمله في الذاكرة دفعة واحدة.

وأود أن أشير أيضا إلى أنه في معظم تطبيقات MD5 فمن الممكن لإضافة بيانات byte[] في هضم وظيفة قطعة في وقت واحد، ومن ثم طلب التجزئة في نهاية المطاف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top