我已經給了一個任務來編寫一個程序來計算從我們的網站請求多少頁面瀏覽量。我目前的做法是從谷歌分析實時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