1
我正在使用Microsoft Sync Framework並每隔10秒在WCF服務上同步。在某些系統上,我遇到了怪異的SemaphoreFullExceptions,所以我試圖重構這個Synching Background Thread。 基本上我的問題是:什麼樣的方法更傾向於:WCF服務10s呼叫同步
private void SynchronizedWorker()
{
// Sync loop
while (!_shouldStop)
{
using (var conn = new SqlConnection())
{
SyncOrchestrator orchestrator = new SyncOrchestrator();
SqlSyncProviderProxy destinationProvider = new SqlSyncProviderProxy("TEST");
SqlSyncProvider localProvider = new SqlSyncProvider("TEST", conn);
// Set Providers
orchestrator.LocalProvider = localProvider;
orchestrator.RemoteProvider = destinationProvider;
// Direction
orchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
// Sync
orchestrator.Synchronize();
}
// wait for next interval or being woken up
if (_syncWaitEvent.WaitOne(10000))
{
// we have been signaled prior to the timeout expiring
_syncForce = false;
}
}
}
或本
SqlConnection conn;
SyncOrchestrator orchestrator = new SyncOrchestrator();
SqlSyncProviderProxy destinationProvider = new SqlSyncProviderProxy("TEST");
SqlSyncProvider localProvider = new SqlSyncProvider("TEST", conn);
private void SynchronizedWorker2()
{
conn = new SqlConnection();
orchestrator = new SyncOrchestrator();
destinationProvider = new SqlSyncProviderProxy("TEST");
localProvider = new SqlSyncProvider("TEST", conn);
// Set Providers
orchestrator.LocalProvider = localProvider;
orchestrator.RemoteProvider = destinationProvider;
// Direction
orchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
// Sync loop
while (!_shouldStop)
{
// Sync
orchestrator.Synchronize();
// wait for next interval or being woken up
if (_syncWaitEvent.WaitOne(10000))
{
// we have been signaled prior to the timeout expiring
_syncForce = false;
}
}
}
對每個同步創建新的對象,我似乎是要走的更清潔的方式。但是,它當然會花費更多的CPU時間。
您認爲如何?
我從來沒有使用「同步」,但如果這些對象實現IDisposable,那麼我強烈建議讓他們在局部變量和implem使用''塊。 –
SyncOrchestrator不實現IDisposable,但提供程序執行此操作。但是因爲我使用會話與WCF通信,所以我可能會盡可能長時間地禁止提供者,因爲安全協商可能會花費很多。 – Travis