日期:2014-05-19  浏览次数:20792 次

随机数生成占用cpu太大的问题
有这样一个随机数仿真器,每隔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);
#endregion

while   (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;
}

------解决方案--------------------
while (true) // 主线程停下来等待Timer对象的终止
{
Thread.Sleep(0);
}

这种语句留着干嘛!很耗CPU的!!!!
------解决方案--------------------
用个timer 10秒调用一次产生随机数的函数就可以了
为什么要
while (true) // 主线程停下来等待Timer对象的终止
{
Thread.Sleep(0);
}

或者不用timer 开个线程产生随机数
while
{
//产生随机数;
sleep(10000);
}