gpt4 book ai didi

c# - 后台 worker 有限制吗?技术常识

转载 作者:行者123 更新时间:2023-12-03 12:51:01 25 4
gpt4 key购买 nike

在Program.cs中,我具有以下检查方法以及将5个SQL数据库与中央服务器同步的方法。每个程序都是彼此独立的,因此我想通过使它们全部同时运行来加快程序的加载时间。

不幸的是,这一次工作非常不稳定,然后又不是。本地数据库是SQLExpress 2005,中央数据库是SQL Server Standard 2005。

这些连接可以有多少个连接是否有限制?后台 worker 呢,我一次只能运行这么多吗?我敢肯定,这样做有一种更为 Eloquent 方法,我很想听听(见)他们。

这就是我在Program.cs的Main()中如何称呼它->
if(IsSqlAvailable())
SyncNow();

internal static void SyncNow()
{



#region ConnectDB Merge Sync Background Thread

BackgroundWorker connectBW = new BackgroundWorker
{
WorkerReportsProgress = false,
WorkerSupportsCancellation = true
};
connectBW.DoWork += new DoWorkEventHandler(connectBW_DoWork);
if (connectBW.IsBusy != true)
connectBW.RunWorkerAsync();

#endregion

#region aspnetDB Merge Sync Background Thread

BackgroundWorker aspBW = new BackgroundWorker
{
WorkerReportsProgress = false,
WorkerSupportsCancellation = true
};
aspBW.DoWork += new DoWorkEventHandler(aspBW_DoWork);
if (aspBW.IsBusy != true)
aspBW.RunWorkerAsync();

#endregion

#region MatrixDB Merge Sync Background Thread

BackgroundWorker matrixBW = new BackgroundWorker
{
WorkerReportsProgress = false,
WorkerSupportsCancellation = true
};
matrixBW.DoWork += new DoWorkEventHandler(matrixBW_DoWork);
if (matrixBW.IsBusy != true)
matrixBW.RunWorkerAsync();

#endregion



#region CMODB Merge Sync Background Thread

BackgroundWorker cmoBW = new BackgroundWorker
{
WorkerReportsProgress = false,
WorkerSupportsCancellation = true
};
cmoBW.DoWork += new DoWorkEventHandler(cmoBW_DoWork);
if (cmoBW.IsBusy != true)
cmoBW.RunWorkerAsync();

#endregion

#region MemberCenteredPlanDB Merge Sync Background Thread

BackgroundWorker mcpBW = new BackgroundWorker
{
WorkerReportsProgress = false,
WorkerSupportsCancellation = true
};
mcpBW.DoWork += new DoWorkEventHandler(mcpBW_DoWork);
if (mcpBW.IsBusy != true)
mcpBW.RunWorkerAsync();

#endregion

}

static void mcpBW_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
MergeRepl mcpMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "MemberCenteredPlan", "MemberCenteredPlan", "MemberCenteredPlan");
mcpMergeRepl.RunDataSync();
areAllInSync += 1;
}
catch (Exception)
{
if (worker != null) worker.CancelAsync();
}
}

static void cmoBW_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
MergeRepl cmoMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "CMO", "CMO", "CMO");
cmoMergeRepl.RunDataSync();
areAllInSync += 1;
}
catch (Exception)
{
if (worker != null) worker.CancelAsync();
}
}

static void connectBW_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
MergeRepl connectMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "CONNECT", "Connect", "Connect");
connectMergeRepl.RunDataSync();
areAllInSync += 1;
}
catch (Exception)
{
if (worker != null) worker.CancelAsync();
}
}

static void matrixBW_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
MergeRepl matrixMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "MATRIX", "MATRIX", "MATRIX");
matrixMergeRepl.RunDataSync();
areAllInSync += 1;
}
catch (Exception)
{
if (worker != null) worker.CancelAsync();
}
}

static void aspBW_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
try
{
MergeRepl aspnetdbMergeRepl = new MergeRepl(SystemInformation.ComputerName + "\\SQLEXPRESS", "WWCSTAGE", "aspnetdb", "aspnetdb", "aspnetdb");
aspnetdbMergeRepl.RunDataSync();
areAllInSync += 1;
}
catch (Exception)
{
if (worker != null) worker.CancelAsync();
}

}

最佳答案

您需要更具体地说明“易碎性”是什么,它如何体现。如果我正确理解这一点,则说明您在缺少代理支持的情况下尝试手动驱动具有RMO类的合并复制。

需要注意的一件事是,SQL Express仅支持一个调度程序,因此向其中添加多个工作程序(待处理的请求)不会有太大的区别,它们只会堆积在可运行的队列中并争夺一个CPU来运行它们。

其次,我不确定RMO复制类(我假设您使用的类)是否支持在多个并行实例中进行同步,因此,我可能没有必要在每个db上仅做一个BackgroundWorker了(我对此可能是错误的)一个,无论如何我都不是RMO专家)。

关于c# - 后台 worker 有限制吗?技术常识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1133959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com