目前我正在使用 Microsoft Sync Framework 来同步数据库。我需要收集由 Microsoft Sync Framework 插入/更新/删除的每条记录的信息,并对这些信息进行处理。
同步速度可以超过每分钟 50.000 条记录。所以这意味着我的附加代码需要非常轻量级,否则将是巨大的性能损失。
Microsoft Sync FrameworkSyncProgress
为每条记录引发一个事件。我订阅了这样的代码:
// 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;
}
}
在另一个程序集中的其他地方,我有三种方法:
// Assembly2
public class SyncInformation
{
public void HandleInsertedRecordInformation(...) {...}
public void HandleUpdatedRecordInformation(...) {...}
public void HandleInsertedRecordInformation(...) {...}
}
Assembly2
有参考Assembly1
。所以对需要处理收集到的信息Assembly1
的类的存在一无所知。SyncInformation
所以我有以下选项来触发此代码:
Assembly2
在1.1中使用事件并订阅它。事件处理程序<>
1.2。行动<>
1.3。代表们- 使用依赖注入:
public class Assembly2.SyncInformation : Assembly1.ISyncInformation
- 其他?
我知道性能取决于:
- OnSyncProgress
- 转变
- 使用方法调用、委托、Action<> 或 EventHandler<>
- SyncInformation 类的实现
我目前不关心SyncInformation
类的实现。我主要关注OnSyncProgress
方法以及如何调用SyncInformation
方法。
所以我的问题是:
- 最有效的方法是什么?
- 什么是最无效的方法?
- 有没有比使用 switch in 更好的方法
OnSyncProgress
?