大佬们好,小白又来问小白问题了,新手写代码天天都是问题,只能厚着脸皮来求大佬指教,希望大佬们能帮帮忙祝大佬们生活顺心,薪水年年暴涨。
问题:取较长长度的随机字符串,一种是数字字符串,一种是字母字符串。我自己现在用的代码如下:
求助原因:感觉运行有点慢。
以10万次为例:字母字符串(生成长度为10)超过1200毫秒,如果是大小混合时间更是会翻倍。数字字符串会快一些,但也有270毫秒左右。
要求:用C#语言,尽可能高效率的优化。[Asm] 纯文本查看 复制代码 string 取随机数字字符串(){
string 返回字符串 = "";
for (int i = 0; i < 2; i++)
{
int a = 取随机整数(0, int.MaxValue);
if (a >= 1000000000)
{
返回字符串 += a.ToString();
}
else
{
返回字符串 += a.ToString().PadLeft(10, '0');
}
}
return 返回字符串;
}
string 取随机x个字母(int 要几个字母, byte 大写填1小写填2混合填3)
{
string 返回字符串 = "";
int 随机数;
char 字符;
if (大写填1小写填2混合填3 == 1)
{
for (int j = 0; j < 要几个字母; j++)
{
随机数 = 取随机整数(65, 91);
字符 = (char)随机数;
返回字符串 += 字符;
}
}
else if (大写填1小写填2混合填3 == 2)
{
for (int j = 0; j < 要几个字母; j++)
{
随机数 = 取随机整数(97, 123);//小写范围97~122
while (随机数 == 108) //永远不会取到不好辨认的L小写字母,l编码108
{
随机数 = 取随机整数(97, 123);
}
字符 = (char)随机数;
返回字符串 += 字符;
}
}
else
{
for (int j = 0; j < 要几个字母; j++)
{
if (取随机整数(1, 3) == 1)
{
随机数 = 取随机整数(65, 91);
}
else
{
随机数 = 取随机整数(97, 123);
}
while (随机数 == 73 || 随机数 == 108)//如果是混合大小写,那么I和L都不能随机到 因为大写I和小写L很容易弄混
{
if (取随机整数(1, 3) == 1)
{
随机数 = 取随机整数(65, 91);
}
else
{
随机数 = 取随机整数(97, 123);
}
}
字符 = (char)随机数;
返回字符串 += 字符;
}
}
return 返回字符串;
}
int 取随机整数(int 最小值, int 最大值)
{
byte[] b = Guid.NewGuid().ToByteArray();
int b1 = BitConverter.ToInt32(b, 0);
Random ran = new(b1);
return ran.Next(最小值, 最大值);
}
不知道有没有精研效率秘法的精锐大佬出手帮忙优化一下? |