CPU使用率和内存增加时,计时器间隔会增加

时间:2019-03-20 08:44:32

标签: c# multithreading timer cpu

我的代码中有一个计时器,持续了x秒钟。该代码有多个线程,并且有多个计时器。现在我注意到,我的应用程序运行了一段时间后进入了挂起状态,并且从日志中我注意到计时器间隔有所变化。它增加了。这怎么可能?有人可以为此提供解决方案吗? c#中有没有其他计时器可供选择

<div class="sectionmenu">
			<form action="#" target="_self" method="get">
 			 <fieldset>
  			  <legend>برآورد کالری مورد نیاز روزانه</legend>
  				  وزن (kg)<br>
   				 <input type="number" name="weight3" placeholder="weight"><br>
  				  قد (cm)<br>
   				 <input type="number" name="height3" placeholder="height"><br>
				 سن (years)<br>
				 <input type="number" name="age3" placeholder="age"><br>
				  جنسیت<br>
				 <input type="radio" name="female" value="zan" class="sex3">زن
				 <input type="radio" name="male" value="mard" class="sex3">مرد<br
				 میزان فعالیت<br>
				 <select name="activity">
				 	<option value="little"> سبک</option>
					 <option value="almost little"> تقریبا سبک</option>
					 <option value="averge"> متوسط</option>
					 <option value="hard"> سنگین</option>
					 <option value="veryhard"> بسیار سنگین</option>
				 </select><br><br>
  			  <input type="button" value="محاسبه" onClick="bmr()" class="button"><br>
				 <p id="bmr">  </p>
  			</fieldset>
			</form>
</div>

1 个答案:

答案 0 :(得分:1)

计时器不精确。时间间隔是触发事件之前的最短延迟,但是不能保证您的计时器事件将在时间间隔结束后准确执行。

当间隔过去后,计时器会将偶数处理程序排队到线程池中。因此,事件处理程序将在线程池中有一个可用线程作为处理程序,然后有一个可用的CPU内核实际执行时执行。

换句话说,计算机越忙,发生延迟的可能性就越大。

如果您需要更接近实时的执行,则必须使用专用线程并将其优先级设置为高:

Thread myThread = new Thread(MyThreadMethod);
myThread.Priority = ThreadPriority.Highest;
myThread.Start();

但是,现在,在MyThreadMethod中,您需要实现一种复杂的机制,该机制可以监视经过了多少时间并决定是否必须执行实际的代码。

您不应该只是循环检查时间,因为这将占用100%的单个内核。也许可以以较小的间隔使用可怕的Thread.Sleep并检查时间是否过去。您必须使用的间隔比所需间隔小,且间隔至少为10。Thread.Sleep也不精确。