PRA*_*T P 0 c# performance ref
我完全理解.NET中的引用词
既然使用相同的变量,会增加使用ref而不是复制的速度吗?
我发现密码一般是瓶颈.
这是我的代码
protected internal string GetSecurePasswordString(string legalChars, int length)
{
Random myRandom = new Random();
string myString = "";
for (int i = 0; i < length; i++)
{
int charPos = myRandom.Next(0, legalChars.Length - 1);
myString = myString + legalChars[charPos].ToString();
}
return myString;
}
Run Code Online (Sandbox Code Playgroud)
在lawchars之前更好地参考?
不,你不应该把这个字符串引用的参考.
然而,你是毫无意义的创建多个字符串.如果您正在创建长密码,那么这可能是它成为瓶颈的原因.这是一个更快的实现:
protected internal string GetSecurePasswordString(string legalChars, int length)
{
Random myRandom = new Random();
char[] chars = new char[length];
for (int i = 0; i < length; i++)
{
int charPos = myRandom.Next(0, legalChars.Length - 1);
chars[i] = legalChars[charPos];
}
return new string(chars);
}
Run Code Online (Sandbox Code Playgroud)
但是,它仍有三大缺陷:
Random
每次都会创建一个新实例.如果您快速连续两次调用此方法,您将获得两次相同的密码.馊主意.Random.Next()
调用中指定的上限是独占的 - 因此您永远不会使用最后一个字符legalChars
.System.Random
,并不意味着以任何方式加密安全.鉴于这是为了"安全密码",你应该考虑使用类似的东西System.Security.Cryptography.RandomNumberGenerator
.这样做的工作量更大,因为API更难,但你最终会得到一个更安全的系统(如果你做得恰到好处).如果你真的偏执,你可能还想考虑使用SecureString.