有这样一个随机数仿真器,每隔10秒产生一个随机数组,数组大小约为200。但总是cpu占用太大,不知道哪里出了问题。#region Create cyklic timer
int timerInterval = 10*1000;    // 单位:ms
TimerCallback timerDelegate = new TimerCallback(CbTimer);
Timer timer = new Timer(timerDelegate,null,1000,timerInterval);
#endregionwhile (true) // 主线程停下来等待Timer对象的终止
{
    Thread.Sleep(0);
}

public static void CbTimer(object obj)
{
Hashtable data = new Hashtable();
Random rand1=new Random();

for (int i = 0;i < alEnergyTag.Count; i++)
{
    RandomData[i]=rand1.Next(start)*0.01*(i+1);
    data.Add(alEnergyTag[i],RandomData[i]);
} TagKernel.WriteData(data); // write to tagkernel
Console.WriteLine("L1OPCSimulator send "+ data.Count +"个标签 to TagKernel"); foreach(DictionaryEntry de in data)
{
   Console.WriteLine(System.DateTime.Now + " " + de.Key.ToString  ()+ " " + de.Value);
} //random seed change
start+=10;
}

解决方案 »

  1.   


    朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
      

  2.   

    这是程序中的其它部分,与随机数的产生无关——————————————
    TagKernel.WriteData(data);<==?
      

  3.   

    while (true) // 主线程停下来等待Timer对象的终止
    {
        Thread.Sleep(0);
    }这种语句留着干嘛!很耗CPU的!!!!
      

  4.   

    没有这句话,就没法更新数据,产生的随机数是一样的,但这句话的确是罪魁祸首。。多谢lhfzd2004(这个名字真难打)
      

  5.   

    用个timer 10秒调用一次产生随机数的函数就可以了
    为什么要
    while (true) // 主线程停下来等待Timer对象的终止
    {
        Thread.Sleep(0);
    }或者不用timer 开个线程产生随机数
    while
    {
        //产生随机数;
        sleep(10000);
    }
      

  6.   

    System.Timers.Timer t = new System.Timers.Timer(Functions.SafeGetIntFromString(timerInterval,10000));//实例化Timer类,默认间隔时间为20秒钟; 
    t.Elapsed += new System.Timers.ElapsedEventHandler(CbTimer);//到达时间的时候执行事件; 
    t.AutoReset = true;//设置是执行一次(false)还是一直执行(true); 
    t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;这么用吧!不用回调试试!