如何用C#实现在指定的时间段内计算相关数据!一天执行一次计算,但要在规定的时间段内。在计算开始之间检测CPU的使用率,如果CPu的使用率过大就把当天的计算任务延迟!如果延迟时间的是1天甚至几天,如何到实现把延迟的的计算时间和当天的计算任务分别进行计算呢?例如:今天是星期五,我要计算星期四的数据。如果今天计算机空闲就把星期四的数据计算后插入到数据库。这是计算空闲的空闲的情况下!如果今天机器不空闲,要把计算时间延迟到明天,也就是星期六!到星期六以后,计算机有空闲时间。就要把星期四、星期五的数据分别计算放到数据库中!计算的要以天为单位,就是星期六要插入点数据就是两条,是两天的记录!请问如何实现这一点!计算任务调度不能用T-SQLL去执行,因为计算任务的一些数据是十六进制,要取出数据进行转换后再进行的计算!
希望大家给点建议,思路或者一些案例!谢谢!
希望大家给点建议,思路或者一些案例!谢谢!
解决方案 »
- C#动态生成控件的随意拖动和缩放如何实现?急求啊,老师催的很急,谢谢
- 关于获取网页源代码的速度问题
- winform控件句柄上绘制图像(俄罗斯方块)
- combobox选择某一项?
- 正则表达式如何删除部分 <img中的信息
- 上传图片时,要为每个用户建了一个单独的文件夹吗
- 拖动和坐标问题
- 一个送分问题:web form中的html中如何访问web窗体中的Text控件,document.Form1.下没有TextUserName,如何访问呢?在线等待
- timer计时画曲线,又如何保证这条曲线之前画完的部分不会随窗口改变、滚动条移动而改变
- 微软这个BT,只字不提
- C#字符串截取问题
- Repeater 中LinkButton的显示问题。
到下次计算的时候,先到数据库中读取上次计算的时间参数。
这样你就知道,上次是什么时候计算的了。
从上次的那天开始,一直计算到昨天就是你要的数据了。
至于测量cpu是否繁忙,就自己找吧。
2011/1/1 0
2011/1/2 0如果今日是2011/1/1:
今日CPU不繁忙,那么就计算所有任务"计算完成标识"为0的任务,最后把"计算完成标识"更新为1
今日CPU繁忙,那么就不计算任务,不更新"计算完成标识"当到第二天2011/1/2时:
同第一天的步骤判断.这样就实现了,当CPU繁重时,任务延迟的功能.
二、cpu是否繁忙:可以指定一个标准,比如1分钟内取60次cpu占用率的值,如果高于70%就算是繁忙,大致代码如下
PerformanceCounter pm=new PerformanceCounter("Processor","%Processor Time","_Total");
int i=0;
float sumPerformence=0;
while (i<60)
{
sumPerformentce+=pm.NextValue();
Thread.Sleep(1000);
i+=1;
}
三 主体代码结构
if(sumPerforment/60<0.7)
{
//获取前边没有执行插入计算数据的天数和日期列表(包括今天)
//操作数据库
//写入记录
}
四、如何每天定时在某一个时段执行?假定是早5点-早6点间;假定是web程序;
在Global中的Application_Start中写入如下代码,来启动定时管理器
System.Threading.Timer timerHour;
System.Threading.TimerCallback timerHours = new TimerCallback(GlobalIntervalExec.Run );
int periodTime = 60 * 60 * 1000;
timerHour = new System.Threading.Timer(timerHours, null, 20 * 60 * 1000, periodTime);
GC.KeepAlive(timerHour);再新建定时管理器类
public interface ISchedulerJob
{
void Execute();
} public class SchedulerConfiguration
{
private int sleepInterval;
private ArrayList jobs = new ArrayList();
public int SleepInterval
{
get { return sleepInterval; }
}
public ArrayList Jobs
{
get { return jobs; }
}
public SchedulerConfiguration(int newSleepInterval)
{
sleepInterval = newSleepInterval;
}
} public class Scheduler
{
private SchedulerConfiguration configuration = null;
public Scheduler(SchedulerConfiguration config)
{
configuration = config;
}
public void Start()
{
while (true)
{
try
{
foreach (ISchedulerJob job in configuration.Jobs)
{
job.Execute();
} }
catch { }
finally
{
Thread.Sleep(configuration.SleepInterval);
}
}
}
}
用这个类来管理定时执行;当然你执行数据库操作的类要实现ISchedulerJob借口