1

我需要插入一些数据,我通过从我的UI调用WCF并传递一个对象列表来完成它。那么服务调用其插入sequentialy项目较低的业务层(调用其他几个经理和制作大量的呼叫/插入throught的ObjectContext)实体框架并行任务vs WCF

现在我无法理解的问题是这样的:

  • 如果我多次打电话给服务并逐个传递项目,一切正常,插入并行,并且我获得了一些关于时间的性能优势。

  • 如果我尝试在服务类中调用并行foreach,我得到了一个怀疑,因为ObjectContext不是线程安全的,但是我不能每次使用它时锁定代码,因为它发生太多时间

为什么如果我打电话WCF它工作?有没有办法在我的经理班做同样的事情?

谢谢

回答

3

根据您的服务配置为每个并行服务调用创建一个新的实例。但在服务中使用并行循环将导致多次使用相同的ObjectContext。所以基本上,通过WCF调用并行会创建多个ObjectContext,在WCF服务中执行的只使用一个(如您所知,它不是线程安全的)。根据插入的性质,这可能没问题。您也可以在服务中启动多个ObjectContext。

这其中的一些是疯狂的猜测,因为实际上可以影响WCF服务的行为而不运行多个实例,但从您的体验行为来看,这应该是原因,为什么您可以使用WCF服务,而不在WCF服务中。

+0

这或多或少是我在想的,但是在那种情况下,如果我在做任何事情之前开始使用新的ObjectContext的每个循环,那就像调用WCF,是吗?相反,它不起作用 – MaRuf

+0

当谈到并行处理时,有许多缺陷,你能以某种方式确定在使用WCF服务时实际执行多少个并行任务,而不是在WCF服务中?请考虑以下Paralle.For对于可用处理器数量的粗糙比例,其中WCF服务可能被限制为任意数量。另外,在并行循环中实例化ObjectContext时,你会得到什么样的异常? –

+0

我得到异常几个不同的错误,如“读取器关闭时调用读取无效尝试”或“实体xxx映射多次”。他们似乎错误,不应该存在与不同的上下文 – MaRuf