c# – 并行加载到DataSet中的任何问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 并行加载到DataSet中的任何问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1776字,纯文字阅读大概需要3分钟。
内容图文
![c# – 并行加载到DataSet中的任何问题?](/upload/InfoBanner/zyjiaocheng/776/545f3b61bf6140af8a122a44366e5991.jpg)
我有一个Web应用程序,它将SQL Server中的大约50个表加载到DataSet中,基于它构建更复杂的数据结构,然后缓存数据,以便Web应用程序可以更快地执行.
应用程序的初始加载大约需要10秒,其中一半只是从数据库表中加载数据.虽然这在生产中是合理的,但它在开发中会令人沮丧.我想加快速度.
我目前有类似于以下伪代码:
var ds = new DataSet();
var tablesToFill = new List<string>() { ... };
connectToDatabase();
foreach (var t in tablesToFill) fill(ds, t);
disconnectFromDatabase();
fill(DataSet,string)方法基本上填充类似于’Select * from {tablename};’的内容.进入DataSet.Tables [tablename]
我想知道并行加载是否会让事情变得更快.
首先,我将MultipleActiveResultSets = true添加到我的连接字符串(SqlClient).然后,我尝试了以下伪代码:
var ds = new DataSet();
var tablesToFill = new List<string>() { ... };
connectToDatabase();
ds.EnforceConstraints=false; // without this, get concurrency errors in DataSet
tablesToFill.AsParallel().ForAll(t => fill(ds,t));
ds.EnforceConstraints=true;
disconnectFromDatabase();
这似乎工作正常.在二十几个表的子集中,加载时间减少了66%(2.7秒到0.9秒).
有什么我应该知道的可以回来后来困扰我吗?根据MSDN,我应该在DataSet上同步写操作,但由于它们都写入不同的表,所以事情似乎工作正常.但是,我只是幸运和/或是否存在可能带来麻烦的情况(或.NET版本)?
谢谢!
编辑:进一步思考,如果您认为由于线程安全而导致这是危险的,那么如何让每个填充工作在其自己的不同DataSet上并行运行,然后将所有DataTables移动到一个公共DataSet中(在同一个线程中).我想我可以脱离&将DataTable从一个DataSet快速重新附加到另一个DataSet(O(1)时间,而不必复制任何数据).
解决方法:
how about having each fill work on its own distinct DataSet in parallel and then moving all the DataTables into a common DataSet (in the same thread)
为什么不填充单独的DataTables,然后将DataTables添加到DataSet.
等到最后一个DataTable被填满,然后将它们放入DataSet中,应该没有问题.
内容总结
以上是互联网集市为您收集整理的c# – 并行加载到DataSet中的任何问题?全部内容,希望文章能够帮你解决c# – 并行加载到DataSet中的任何问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。