Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个线程读取SQL数据_C#_.net_Sql Server_Multithreading - Fatal编程技术网

C# 从多个线程读取SQL数据

C# 从多个线程读取SQL数据,c#,.net,sql-server,multithreading,C#,.net,Sql Server,Multithreading,我有一个简单的任务——从SQL表中读取数据,对其进行处理,一旦完成——更新DB中的一个字段(set processed=true),因此每个记录只应处理一次 你能告诉我,我可以用什么技术来实现多线程?这意味着,在多个线程中从表中读取数据。如果使用ef和DataContext,您应该知道DataContext不是线程安全的。像MsSQL这样的数据库管理系统是线程安全的。我希望您阅读此如果您希望在多个线程中读取数据而不重叠,那么您可以尝试分页。您可以让每个线程读取不同的页面。例如,您可以让第一个线程

我有一个简单的任务——从SQL表中读取数据,对其进行处理,一旦完成——更新DB中的一个字段(set processed=true),因此每个记录只应处理一次


你能告诉我,我可以用什么技术来实现多线程?这意味着,在多个线程中从表中读取数据。

如果使用ef和DataContext,您应该知道DataContext不是线程安全的。像MsSQL这样的数据库管理系统是线程安全的。我希望您阅读此

如果您希望在多个线程中读取数据而不重叠,那么您可以尝试分页。您可以让每个线程读取不同的页面。例如,您可以让第一个线程读取前20条记录,处理其中的每条记录,然后为每条记录设置processed=true,而第二个线程对接下来的20条记录执行相同的操作,依此类推

有关多线程分页的更多信息,请查看此链接。

您可能不需要多个线程。“你为什么认为你会这样做?”约翰萨恩斯解释道,为什么不呢?如果数据彼此不依赖(即,设置前N条记录与后续N条记录批次的处理无关),则这是多线程的理想选择。如果有一个长时间运行的查询,通常将其拆分将减少总体处理时间。@DavidKhaykin:需要多少磁盘I/O?您确定数据库不能比您更好地使用多线程吗?@JohnSaunders-取决于数据库设计,如果它是一个集群,则取决于数据库如何划分为文件组等。简单地说,可以说,数据库(MS SQL server)的设计是通过多线程高效地处理多个并发请求(即发送多个请求),您正在利用此功能。如果您从一个表中发送一个1000000行的请求,而每个表发送10个100000行的并发请求,则您在后者中模拟10个客户端同时命中数据库-它不会为您仅一个查询拉取一个大记录集而这样做。是的,我只想补充一点,批量大小应该取决于预期记录集的总体大小,以便一些尝试和错误类型调整可以显示将数据分解为的理想批数。