【发布时间】:2014-06-14 20:53:32
【问题描述】:
在我正在开发的一个应用程序中,它需要从同一个 SQL Server 数据库中的大约 5 到 10 个表中读取数据,将它们加载到多个 List 中,然后处理数据。从每个表返回的行数各不相同,有些是 1 行,有些是大约 1,000 行。
该应用程序是用 C# 4.0 编写的,因此我正在考虑使用任务并行库并启动多个任务以同时从这些表中检索数据。我认为这比调用按顺序从这些表中返回数据的单个查询要快,但不确定。所以我的问题是:
- 考虑到打开多个数据库连接等开销,使用多个任务检索数据真的会更快吗?
- 如果在某些情况下答案是肯定的,那么在哪些情况下答案是否定的?
- 如果答案是否定的,是否有任何替代方法?
- 在使用多个任务检索数据时还需要考虑其他事项吗?
为了缩小范围,您可以做出以下假设:
- 数据处理不是问题的一部分。仅数据检索。
- 其中一些表与 FK 相关。像父母
- 这些表仅包含 varchar 和 numeric 列,并且行大小小于 400 字节。
- 普通 ADO.NET(例如 SqlConnection/SqlCommand/SqlDataReader)用于从每个表中检索数据
- 每个任务都会调用一个自包含的方法,该方法从 SqlDataReader 读取数据并返回一个对象列表。
- 数据库服务器功能强大,足以处理所有并发连接和查询。
- 如果使用单个查询来检索序列中的所有数据,客户端计算机的功能足以处理数据操作。它能够进行多线程处理。
- 如果使用单个查询,网络传输数据的速度足够快
提前感谢您的宝贵时间和意见!
【问题讨论】:
-
如果您对如此 微小 的数据量有疑问,您应该查看映射代码,即如何将结果转换为对象列表、查询和您的数据访问代码。 代码在哪里?
-
对于您的问题,我们目前在加载数据方面没有问题。我只是在想使用并行会使其更快。如果它没有伤害任何东西,我们为什么不这样做呢。
-
它确实伤害 - 多个连接会导致数据库负载更大和并发问题,多次往返会增加延迟和延迟,代码变得更加复杂。除非你说的是几十万行,否则并行加载是没有意义的。
标签: c# sql-server task-parallel-library