Pur*_*ome 4 .net c# optimization premature-optimization
我有一些代码我正在调查,用于将一些文本转换为MD5 Hash.效果很好.它用于创建MD5Hhash一个gravatar头像.这里是 :-
static MD5CryptoServiceProvider md5CryptoServiceProvider = null;
public static string ToMD5Hash(this string value)
{
//creating only when needed
if (md5CryptoServiceProvider == null)
{
md5CryptoServiceProvider = new MD5CryptoServiceProvider();
}
byte[] newdata = Encoding.Default.GetBytes(value);
byte[] encrypted = md5CryptoServiceProvider.ComputeHash(newdata);
return BitConverter.ToString(encrypted).Replace("-", "").ToLower();
}
Run Code Online (Sandbox Code Playgroud)
请注意我们如何MD5CryptoServiceProvider在第一次调用此方法时创建?(为简单起见,这里不要担心竞争条件).
我想知道,如果我改变用于创建提供者的行,那么它的计算成本会更高......
using(var md5CryptoServiceProvider = new MD5CryptoServiceProvider())
{
... snip snip snip ....
}
Run Code Online (Sandbox Code Playgroud)
现在,这个方法是如何使用/消费的?好吧,想象一下它是StackOverflow的主页 - >对于每个帖子,生成用户的md5哈希值,这样我们就可以生成他们的gravatar url.所以视图可以调用这个方法几十次.
不要浪费太多时间来强调过早的优化等等......这会更好吗?
Mar*_*ell 10
我对线程安全更感兴趣... MSDN没有(除非我错过了)说MD5CryptoServiceProvider是线程安全的,所以IMO最好的选择是每次调用一个...
你得到错误答案的速度并不重要;-p
你可能不希望做(来解决线程安全问题)是有一个静态实例,并lock围绕它...那将系列化你所有的加密代码,当它可以在不同的请求并行运行.
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |