c# – 如何阻止BackgroundWorker排队?
发布时间:2020-12-16 01:55:42 所属栏目:百科 来源:网络整理
导读:我有以下代码: for (int i = 1; i = 500; i++){ BackgroundWorker t = new BackgroundWorker(); t.DoWork += SOME DB METHOD THAT TAKES 5 SECONDS t.RunWorkerAsync();} 当我在SQL中对此进行分析时,我注意到BackgroundWorker似乎是以这样一种方式对线程进
我有以下代码:
for (int i = 1; i <= 500; i++) { BackgroundWorker t = new BackgroundWorker(); t.DoWork += SOME DB METHOD THAT TAKES 5 SECONDS t.RunWorkerAsync(); } 当我在SQL中对此进行分析时,我注意到BackgroundWorker似乎是以这样一种方式对线程进行排队,即只有4个或5个活动连接同时打开,而所有500个连接一次打开.我的数据库没有超时或阻止.如何防止此排队并同时使用所有500个并发线程命中数据库? 解决方法
BackgroundWorker使用ThreadPool.您可以使用ThreadPool.SetMinThreads和ThreadPool.SetMaxThreads调整ThreadPool.如果实际上可以确定与数据库服务器的许多连接可能是另一个问题(并导致其他问题).
但是,不建议启动500个BackgroundWorker实例!使用Task类的“任务并行库”可以提供更好的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |