gpt4 book ai didi

c# - 循环运行太快?

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:04 26 4
gpt4 key购买 nike

我有一个循环(如下),它根据用户输入循环 N 次。循环,调用一个方法,该方法创建一个随机文本字符串以插入到数据库中。我希望循环在执行查询之前调用此方法,因此每次插入数据库都有不同的随机字符串。

似乎正在发生的事情是循环运行得太快,并且随机字符串被插入了大约 50 次,因为动态字符串变量没有足够快地更新。但是,如果我输入 Thread.Sleep(50),代码将完美执行。

我不喜欢 thread.sleep 选项,因为我不知道它需要休眠多长时间,如果我们开始运行几十万个事务,这个时间就会加起来。有没有人有好的解决方案来确保方法在继续之前完全执行?

for (int i = 0; i < nLoop; i++)
{
rnd.RndName();
query.CommandText = "insert into XXX (col";
query.ExecuteNonQuery();
}

最佳答案

What seems to be happening, is that the loop runs too quickly, and the random string is inserted about 50 times because the dynamic string variable doesn't get updated quick enough .

循环中的指令将一个接一个地执行。

除非 rnd.RndName() 启动一个单独的线程(在这种情况下,显示该代码)它将在以下两个语句执行之前完成。

如果名称没有更改,则问题出在其他地方。

however, if i throw in a thread.sleep(50), the code executes perfectly.

您显示的代码中没有任何内容对线程休眠敏感。如果这有一些影响,问题在于 rnd.RndName() 是如何实现的。也许您每次都在创建 Random 的新实例(正如@rynah 的评论中所建议的那样)?如果是,则使用系统时间初始化实例。这会导致您观察到的行为。

Random 类并不真正生成随机数。它为给定的种子值生成一系列确定性的数字。如果您播种到当前的滴答数(我相信 Random 会这样做),快速连续创建许多 Random 实例将导致它们都具有相同的种子,因此产生完全相同的数字序列。

关于c# - 循环运行太快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com