当前位置: 首页 > 编程语言 > C#

SqlDataAdapter.Fill–异步方法分享

时间:2023-04-10 23:11:26 C#

SqlDataAdapter.Fill–使用C#/.NET3.5的异步方法。目前我正在使用SqlDataAdapter.Fill()按顺序填充2个数据表。我希望并行填充两个数据表,同时异步执行每个数据表。但是,没有Fill()方法的异步版本-即BeginFill()会很棒!我试过的一个方法是(伪):,DataTable.Load()耗时较长:执行步骤1到4需要3秒,然后执行步骤5需要22秒。第6步需要17秒。所以第5步和第6步合计39秒。最终结果是这对我没有好处,只是一个接一个地执行2SqlDataAdapter.Fills。我希望最终结果是整个过程只需要最长的查询(或尽可能接近)。寻找推荐的方法并最终找到了一些真正异步的方法来填充数据表。或者我自己管理它并滚动2个单独的线程,每个线程填充一个数据表?我建议每个都有一个单独的工作线程。您可以使用ThreadPool.QueueUserWorkItem。列表事件=newList();AutoResetEventloadTable1=newAutoResetEvent(false);事件.Add(loadTable1);ThreadPool.QueueUserWorkItem(delegate{SqlCommand1.BeginExecuteReader;SqlCommand1.EndExecuteReader;DataTable1.Load(DataReader1);loadTable1.Set();});AutoResetEventloadTable2=newAutoResetEvent(false);事件。添加(loadTable2);ThreadPool.QueueUserWorkItem(delegate{SqlCommand2.BeginExecuteReader;SqlCommand2.EndExecuteReader;DataTable2.Load(DataReader2);loadTable2.Set();});//等到两个表都加载完毕。WaitHandle.WaitAll(事件.ToArray());这是因为DataTable有许多对象(行、值)要创建。您应该在单独的线程中执行适配器和数据表的填充,并在继续之前同步等待每个操作完成。下面的代码是用记事本写的,可能连编译都没有,但希望你能明白……以上就是C#学习教程:SqlDataAdapter的全部内容。有关C#学习教程的更多信息,希望您多加关注—//将状态设置为包含表和用于填充该表的适配器的参数对象voidDoWork(){Listsignals=GetNumberOfWaitHandles(2);varparams1=newDataWorkerParameters{命令=GetCommand1();表=新数据表();}varparams2=newDataWorkerParameters{命令=GetCommand2();表=新数据表();}ThreadPool.QueueUserWorkItem(state=>{varinput=(DataWorkerParameters)state;PopulateTable(input);input.AutoResetEvent.Set();//你可以在调用者中使用AutoResetEvent.WaitAll()等待所有线程完成},参数1);ThreadPool.QueueUserWorkItem(state=>{varinput=(DataWorkerParameters)state;PopulateTable(input);input.AutoResetEvent.Set();//你可以在调用者中使用AutoResetEvent.WaitAll()等待所有线程完成},参数2);WaitHandle.WaitAll(signals.ToArray());}voidPopulateTable(DataWorkerParametersparameters){input.Command.ExecuteReader();input.Table.Load(input.Command);}本文收集自网络,不代表立场。侵权请点击维权联系管理员删除如需转载请注明出处: