正确使用具有实体框架的生产者/消费者模式

时间:2016-10-13 11:56:42

标签: c# multithreading entity-framework

我正在使用以下工作流程开展项目:

第一部分:

  • 逐行读取文件(~100 000 URL)中的长URL列表
  • 将每一行添加到阻止集合Q(生产者)
  • 对于Q中的每个网址,请执行一些处理:下载和解析数据(使用者)
  • 将处理后的数据添加到列表L

第二部分:

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

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

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

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

有没有更好的方法来解决此问题。注意:我的首要任务是速度

0 个答案:

没有答案