C# 使用实体框架正确使用生产者/消费者模式

C# 使用实体框架正确使用生产者/消费者模式,c#,multithreading,entity-framework,C#,Multithreading,Entity Framework,我正在使用以下工作流处理项目: 第一部分: 逐行读取文件中的长URL列表(~100000 URL) 将每行添加到阻塞集合Q(生产者) 对于Q中的每个URL,进行一些处理:下载和解析数据(消费者) 将处理后的数据添加到列表L 第二部分: 现在,我有10万条记录要保存到数据库中。我必须使用实体框架更新现有记录添加不存在的记录(无重复)。为此,我有两种情况: 1-在Q(消费者)中处理URL时,将一条记录保存到数据库中 ==>对数据库的许多请求,浪费了实体框架的时间,每次我们都会向数据库添加锁,以检

我正在使用以下工作流处理项目:

第一部分:

  • 逐行读取文件中的长URL列表(~100000 URL)
  • 将每行添加到阻塞集合Q(生产者)
  • 对于Q中的每个URL,进行一些处理:下载和解析数据(消费者)
  • 将处理后的数据添加到列表L
第二部分:

现在,我有10万条记录要保存到数据库中。我必须使用实体框架更新现有记录添加不存在的记录(无重复)。为此,我有两种情况:

1-在Q(消费者)中处理URL时,将一条记录保存到数据库中 ==>对数据库的许多请求,浪费了实体框架的时间,每次我们都会向数据库添加锁,以检查元素是否重复

2-等待第一部分的结束,对数据库执行一个大请求,以添加所有新记录并更新现有记录。 ==>不要充分利用在多线程上下文中异步运行使用者,因为我必须等待处理Q中的所有元素

我认为如果我可以做中间解决方案会更好:添加另一个阻塞集合Q2,这样第一部分中的每个已消费元素都将添加到Q2。当Q2的大小达到一个固定的最优值(例如1000个元素)时,启动Q2的使用者,该使用者将向数据库中添加1000条记录。 因此,我正在考虑在我的解决方案中添加另一种生产者/消费者机制

有没有更好的办法来解决这个问题。注:我的首要任务是速度