2012-12-13 40 views
0

我有一个长时间运行的任务,它受益于多线程。Linq 2 SQL并行处理

随着时间的推移,每个线程都会添加一个L2S实体,每个线程都需要访问该实体中的属性。

由于实体的单个实例的这种需求,所以很难为每个线程使用多个数据环境。 有没有一种可以实现这种情况的方法?

在使用Linq to SQL之前,我在经过一系列并行迭代后序列化为XML。这工作得很好,但数据已经变得更加复杂,需要在SQL中提供关系/查询;

一些附加信息: 该任务是分析视频帧,以找到相似帧的序列。 有媒体,框架和镜头的表格。 具有多个帧和镜头的媒体 具有多个帧的镜头; 帧提取和比较是处理器密集型操作,并受益于多线程。

问题是,对于每个提取的帧。它需要将它自己与它之前和之后的帧进行比较。前/后帧可能来自单独的线程。 因此,将帧和镜头插回到正在处理的单个媒体对象中意味着将来自多个数据上下文的实体合并为1.

+0

你在这个对象上调用了什么操作?线程之间共享哪种方式? – DHN

+0

你的实体是一个Singleton吗?如果没有,那就制作它。然后,任何数量的数据上下文都可以访问它,而无需创建它的新实例。 –

+0

该实体表示包含来自多个表的数据的复杂对象。每个线程都会根据这些表中的现有数据和外部源数据向这些表中添加条目。 –

回答

0

不是解决并行Linq问题,而是改变了过程。

而不是试图从多个线程同时访问相同的项目列表。我已经拆分了项目列表并为每个部分分配了一个线程。

这样,每个线程都可以在自己的列表上执行操作,而不会互相碰撞。 然后我写了一个整理方法来整理列表之间的连接。