0
我每10分鐘讀取MSSQL數據庫並處理數據&上傳從給定數據生成的XML文件。數據庫在公共領域每8分鐘更新一次。在每次定時器調用中,我們都會收到大約1050-2000條數據行。目前我使用C#Timer來獲取和更新並同步本地和遠程數據庫。有時下面的代碼無法響應並掛起。請提供以下替代方案或任何其他可以實時運行的邏輯。C#定時器讀取數據庫
代碼:
System.Timers.Timer Timer =null;
public void initModelViewer
{
Timer = new System.Timers.Timer();
Timer.Interval = 1000*60*10;
Timer.Enabled = true;
Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
Timer.Start();
}
void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
lock (this)
{
#region GetCustIRDI
DataSet DsIRDIModel = DbManager.GetDatasetByCommand(cSQL.getIRDIInfo("SQL Command"));
//Process the information.
//update the client side application.
#endregion
#region GetCustIRDIXML
DataSet DsIRDIXMLModel = DbManager.GetDatasetByCommand(cSQL.getIRDIXML("SQL Command"));
//Generate and save the XML. Another app upload it
XMLAPPFabicModel FabricXML = new XMLAPPFabicModel(DsIRDIXMLModel, XMLSpecs.Limitation));
//Fabric EventHandlers...
//Sync the local DBFabricModel and update main server
#endregion
}
}catch(Exception ex){
//Error handling
}
}
爲什麼不在處理完成後的預定義時間內使用'睡眠'的Windows服務。隨着你的定時方法,你可能會遇到併發問題。 – Kane 2012-01-17 11:01:38
是的,你是對的,定時器啓用和禁用將解決我的問題,它會系統地工作,但我不能有任何延遲之間。有時系統等待15分鐘以上才能完成整個過程。後臺線程可以提供任何幫助嗎? – 2012-01-17 11:10:05
您可以隨時使用TaskManager(4.0)或線程池來傳播工作負載,即垂直縮放。如果你想要水平縮放,那麼只需要幾臺機器都具有windows服務,但只能在一組預定義的記錄上運行。服務器A處理的記錄ID爲0到1000,服務器B處理記錄1001到2000等等。 – Kane 2012-01-17 11:16:34