MD5CryptoServiceProvider 如果多次使用会产生内存溢出,如下这样调用几百万次就会出现内存
溢出。
public
static
string
MD5Encode(
string
source)
{
if
(
string
.IsNullOrEmpty(source))
return
source;
MD5 md5 =
new
MD5CryptoServiceProvider();
byte
[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(source));
return
BitConverter.ToString(s).Replace(
"-"
,
""
);
}
原因:
MD5CryptoServiceProvider 调用了非托管对象,错误的使用方法导致非托管对象的无法释放
解决办法:
方法一:调用md5.Dispose()方法
方法二:使用MD5CryptoServiceProvider方法时使用using方法,让程序自动释放相关资源。
此问题在开发LogParser时遇到过,后来通过using解决了,但是未详细了解具体导致原因,通过阅
读博客发现了详细描述,在此进行记录,
详细描述:
http://my.oschina.net/runescape/blog/552942