关于类的内存于释放问题

发现一个问题。

假如,写一个类,这个类就只有一个方法,就是返回一个随机数,以下是类的代码

   public class TextCC
    {
        public string ABCD()
        {
            Random r = new Random();
            int A = r.Next(0, 32);
            return A.ToString();
        }
    }

然后,我们现在放置一个按钮,通过按钮来调用这个类。
那么问题来了

假如,我是使用循环调用,代码如下


  private void button1_Click(object sender, EventArgs e)
        {
            TextCC CC = new TextCC();
            for (int i = 0; i < 70; i++)
            {
                richTextBox1.AppendText(CC.ABCD().ToString() + "/");
            }      
        }

那么返回的结果,就很奇怪。就是这样

img

但如果,不适用循环,代码如下


 private void button1_Click(object sender, EventArgs e)
        {
            TextCC CC = new TextCC();
            richTextBox1.AppendText(CC.ABCD().ToString() + "/");
        }

返回的结果,就特别正常,全是随机的

img

就算把引用,放进循环里,代码如下

 private void button1_Click(object sender, EventArgs e)
           {  

            for (int i = 0; i < 70; i++)
            {
                TextCC CC = new TextCC();
                richTextBox1.AppendText(CC.ABCD().ToString() + "/");
            }
          
        }

返回的结果,也是一样的很奇怪

img

我就没搞懂为什么?为啥单点就正常,遍历就不正常?哪怕我把new放进遍历里,也不正常,啥意思啊。是不是遍历太快了,类还没来得及释放就又被调用了,导致结果出问题!

C#生成随机数和计算的时间有关系 如果需要随机的话
可以加一个暂停代码 试试

 
  private void button1_Click(object sender, EventArgs e)
        {
            TextCC CC = new TextCC();
            for (int i = 0; i < 70; i++)
            {
                richTextBox1.AppendText(CC.ABCD().ToString() + "/");
Thread.Sleep(300);
            }      
        }
```c#


```

Random r = new Random(); 使用默认种子产生随机数。而这个默认种子跟时间有关系,在循环中,因为速度快,这个默认种子没有来得及改变,那么得到的随机数也是一样的。

如果计算机运行速度很快,如果触发 Randm 函数间隔时间很短,就有可能造成产生一样的随机数
http://c.biancheng.net/view/2830.html

相同的种子将产生相同的伪随机数序列
new Random(Guid.NewGuid().GetHashCode())
确保每次都使用不同的种子