現在、データベースの同期にMicrosoftSyncFrameworkを使用しています。Microsoft Sync Frameworkによって挿入/更新/削除されたレコードごとに情報を収集し、この情報を使用して何かを行う必要があります。
同期速度は1分あたり50.000レコードを超える可能性があります。つまり、追加のコードは非常に軽量である必要があります。そうしないと、パフォーマンスが大幅に低下します。
Microsoft Sync Frameworkは、SyncProgress
レコードごとにイベントを発生させます。私はこのようなコードを購読しています:
// Assembly1
SyncProvider.SyncProgress += OnSyncProgress;
// ....
private void OnSyncProgress(object sender, DbSyncProgressEventArgs e)
{
switch (args.Stage)
{
case DbSyncStage.ApplyingInserts:
// MethodCall/Delegate/Action<>/EventHandler<> => HandleInsertedRecordInformation
// Do something with inserted record info
break;
case DbSyncStage.ApplyingUpdates:
// MethodCall/Delegate/Action<>/EventHandler<> => HandleUpdatedRecordInformation
// Do something with updated record info
break;
case DbSyncStage.ApplyingDeletes:
// MethodCall/Delegate/Action<>/EventHandler<> => HandleDeletedRecordInformation
// Do something with deleted record info
break;
}
}
別のアセンブリのどこかに、3つの方法があります。
// Assembly2
public class SyncInformation
{
public void HandleInsertedRecordInformation(...) {...}
public void HandleUpdatedRecordInformation(...) {...}
public void HandleInsertedRecordInformation(...) {...}
}
Assembly2
への参照がありAssembly1
ます。したがって、収集された情報を処理する必要があるクラスAssembly1
の存在については何も知りません。SyncInformation
したがって、このコードをトリガーするための次のオプションがあります。
Assembly2
イベントを使用し、 1.1でサブスクライブします。EventHandler<>
1.2。アクション<>
1.3。代表者- 依存性注入の使用:
public class Assembly2.SyncInformation : Assembly1.ISyncInformation
- 他の?
私はパフォーマンスが以下に依存することを知っています:
- OnSyncProgress
- スイッチ
- メソッド呼び出し、デリゲート、Action<>またはEventHandler<>を使用する
- SyncInformationクラスの実装
SyncInformation
私は現在、クラスの実装については気にしません。私は主にOnSyncProgress
メソッドとメソッドの呼び出し方法に焦点を当てていSyncInformation
ます。
だから私の質問は:
- 最も効率的なアプローチは何ですか?
- 最も非効率的なアプローチは何ですか?
- でスイッチを使用するよりも良い方法はあり
OnSyncProgress
ますか?