我正在使用,每10秒在WCF服务上同步一次。在某些系统中,我遇到了奇怪的SemaphoreFullExceptions,所以我试图重构这个同步后台线程。基本上,我的问题是:更喜欢哪种方法:
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时间稍微多一点。
你认为如何?
发布于 2013-12-18 15:34:01
我所做的是使用相同的Orchestrator进行同步,但在两种情况下,我将处理对象(并在需要时重新创建):
我觉得这是该走的路。
https://stackoverflow.com/questions/20614124
复制相似问题