我已经给了一个任务来编写一个程序来计算从我们的网站请求多少页面浏览量。我目前的做法是从谷歌分析实时API获取数据,这对我的惊喜起作用。C#调用方法每分钟55秒
我的问题是,为了获得浏览量的每一分钟,我需要查询从谷歌API数据的两倍(因为它返回从重置每分钟的计时器达29分钟加一值之和)。在设置“重置点”之后,我们只需说每分钟55秒就会在第56分钟和随后的第53分钟轮询数据,这使我对新用户/请求的页面访问有了较好的估计。
所以这是我目前的做法:
static System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.AutoReset = false;
myTimer.Interval = interval();
myTimer.Elapsed += myTimer_Elapsed2;
myTimer.Start();
static double interval()
{
return 1000 - DateTime.Now.Millisecond;
}
static void myTimer_Elapsed2(object sender, System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now.Second == (resetPoint.Second - 1) % 60 && warden)
{
DoStuff(); //mostly inserting google API data to database
}
else if (DateTime.Now.Second == (resetPoint.Second + 1) % 60) //so we dont get riddiculous 60 and above
{
//I get some data here, to later use it in DoStuff - mostly to calculate the gap between later
}
myTimer.Interval = interval(); //Because DoStuff() takes about 0.5 sec to execute, i need to recalibrate
myTimer.Start();
}
和它的作品真的很好,直到它停止约2小时后,现在我不知道为什么(程序运行,只是计时器没有做它工作了)。
如何长时间保持稳定?最好的情况是在没有干预的情况下运行数月。
@我编辑给一个更好的感觉是什么,我实际上做
@END学分
我结束了使用两个定时器,在一分钟一圈的每个运行。数据库写作有时会崩溃,我没有正确处理相应的异常。 Log告诉我,google API函数会不时地检索数据,导致多个Threading.Event调用,并使我的数据库数据处理抛出异常,从而停止定时器。
我试图用石英的方法,但是它缺乏人性化的HOWTO的让我放弃这个库。
您可能已达到Google API限制限制吗? – Nzall 2014-11-04 14:35:29
不,谷歌允许我每天轮询数据5万次,对于这项任务,我只需要大约4千(一天1440分钟* 2 +校准开始) – Luntri 2014-11-04 14:42:17
我认为你可以将'%60'离开因为'秒'从0运行到59.并且不需要每次启动定时器。而且,当毫秒为999时,你的消息队列会填充很多定时器消息。如果发生在第55秒,您可能会压倒GoogleAPI。 – Sjips 2014-11-04 14:42:58