我每10分钟读一次MSSQL数据库并处理数据&上传从给定数据生成的XML文件。数据库在公共领域每8分钟更新一次。在每个定时器调用中,我们接收大约1050-2000个数据行。目前我正在使用C#Timer获取并更新和同步本地和远程数据库。有时,以下代码无响应并在两者之间挂起。请提供以下或任何其他可以实时运行的逻辑的替代方案。
代码:
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
}
}
答案 0 :(得分:1)
首先,据我所知,不要使用与“this”关键字同步。 而不是,使用:
private readonly object _sync;
其次,我不知道您的对象(XMLAPPFabicModel,DbManager),但如果您想要调试它,则需要逐个使用对象。
例如,在调试方案1中仅使用
DataSet DsIRDIModel = DbManager.GetDatasetByCommand(cSQL.getIRDIInfo("SQL Command"));
在方案2中仅使用:
XMLAPPFabicModel FabricXML = new XMLAPPFabicModel(DsIRDIXMLModel, XMLSpecs.Limitation));
使用一些DsIRDIXMLModel对象。
第三,为什么需要DsIRDIModel对象?