none
请问,如果运算量很大,如何让程序自动调整..如使用CPU达到50%以上就不再处理新的任务.直至CPU占用率下降后再处理新的任务 RRS feed

  • 问题

  • 不好意思,之前已经提过这个话题.只是里面的一个小问题还没得到答案.所以再放上来.感谢!

    环境:.NET Framework 3.5 winform程序启动的WCF后台服务程序(多线程)

    执行方式:金融类软件.当外部数据改变时(如股票/外汇等)需要对当前服务器内的用户数据(上万笔)进行相应的计算处理..外部数据可能一秒内改变几十次.这样的话就会在一秒触发几十次内部计算方法.不过计算方法不是很复杂...

    目前的状况:经常会占用90-100%CPU.致使服务无法即时响应...

    请教:

    如果运算量真的很大,如何让程序自动调整状态..如使用CPU达到50%以上就不再处理新的任务.直至CPU占用率下降后再处理新的任务.以防止造成CPU占用率太高.


    感谢!

    2010年8月28日 9:58

答案

  • 补充:

    System.Diagnostics.PerformanceCounter  performanceCounter1; 
      performanceCounter1  =  new  System.Diagnostics.PerformanceCounter(); 
      performanceCounter1.CategoryName  =  "Processor"; 
      performanceCounter1.CounterName  =  "%  Processor  Time"; 
      performanceCounter1.InstanceName  =  "_Total"; 
      performanceCounter1.MachineName  =  ".";  //本机 
      performanceCounter1.NextValue();  //cpu占用率

    • 已标记为答案 Tony_Wu 2010年9月2日 2:45
    2010年8月30日 2:31
    版主

全部回复

  • 我想可以在你的wcf中加入检测当前系统cpu占比的method,

    在其它的method执行的时候,要首先判断当前的cpu占比,若高于50%,则返回"系统繁忙,请稍候重试"的消息.

    2010年8月29日 14:04
  • 补充:

    System.Diagnostics.PerformanceCounter  performanceCounter1; 
      performanceCounter1  =  new  System.Diagnostics.PerformanceCounter(); 
      performanceCounter1.CategoryName  =  "Processor"; 
      performanceCounter1.CounterName  =  "%  Processor  Time"; 
      performanceCounter1.InstanceName  =  "_Total"; 
      performanceCounter1.MachineName  =  ".";  //本机 
      performanceCounter1.NextValue();  //cpu占用率

    • 已标记为答案 Tony_Wu 2010年9月2日 2:45
    2010年8月30日 2:31
    版主