私は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
}
}
処理が完了したあと、定義済みの期間スリープするWindowsサービスを使用しないでください。あなたのタイムド・アプローチでは、並行性の問題が発生する可能性があります。 – Kane
はい、あなたは正しいです、タイマーの有効化と無効化は私の問題を解決し、体系的に動作しますが、私は間に遅延を持つことはできません。プロセス全体を終了するためにシステムが15分以上待つことがあります。バックグラウンドスレッドは何か助けになるでしょうか? –
タスクマネージャ(4.0)またはスレッドプールを使用して、作業負荷を分散させることができます。水平方向の拡大縮小が必要な場合は、すべてがWindowsサービスを持ち、事前定義されたレコードセットでのみ動作する複数のマシンを持つだけです。サーバーAプロセスはレコードIDが0〜1000のサーバーBがレコード1001〜2000などを処理します。 – Kane