Chi*_*ata 1 c# memory optimization
可能重复:
随机数生成器仅生成一个随机数
我的工作中有一个方法,它通过在一组单词之间随机选择产生一个句子,如下所示:
private string generateTest(string test)
{
test = test.ToLower();
string sentence = "";
for (int c = 0; c < 30; c++)
{
Random r = new Random();
int len = r.Next(3, 7);
string word = "";
for (int i = 0; i < len; i++)
{
word += test[r.Next(0, test.Length)];
}
sentence += word + ' ';
}
return sentence;
}
Run Code Online (Sandbox Code Playgroud)
然而,问题在于,在随机生成前6个单词之后,所有后续代都完全相同.例如
aqaaaz,qqzaq,aqqza,azqq,aazzq,aqqa,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq,azzzq. ...
然后,即使我重新启动程序,同样的事情也适用.我在想这是.NET Runtime做一些自动优化.谁能解释得更好?我该如何解决这个问题?
您正在为循环的每个循环生成实例.将您的代码更改为:
Random r = new Random();
for (int c = 0; c < 30; c++)
{
...
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望为其分配有意义的种子.现在,您没有将任何内容传递给构造函数,如果重新创建相同的实例,这可能会产生非常随机的结果.
编辑:正如影子向导正确地指出,给它相同的种子产生相同的结果.当我说" 有意义的种子 "时,我暗示了具有随机或伪随机属性的东西.有许多方法可以产生更多不可预测的结果,但是为了解决您的问题,将实例移出循环 - 或者将其实例化为包含类的成员 - 就足够了.您对种子或RNG的选择应取决于您的要求.
归档时间: |
|
查看次数: |
82 次 |
最近记录: |