小编Cas*_*ter的帖子

Parallel.ForEach 中每个线程的 DbContext 安全吗?

我现在正在签订一份合同,以提高使用 EF 6 作为 ORM 的现代 SaaS SPA Web 应用程序的后端服务的性能。我建议的第一件事是向当前运行单线程的后端服务引入一些多线程。首席软件工程师表示我们不能这样做,因为 EF 6 不是线程安全的。

我不是实体框架方面的专家。我选择的 ORM 是 DevExpress 的 XPO,并且我已经完成了与下面建议的类似的操作,使用该 ORM 没有出现问题。使用 EF 6 这种模式本质上不安全吗?

int[] ids;
using(var db = new ApplicationDbContext())
{
    // query to surface id's of records representing work to be done
    ids = GetIdsOfRecordsRepresentingSomeTask(db);
}

Parallel.ForEach(ids, id => { 
    using(var db = new ApplicationDbContext())
    {
        var processor = new SomeTaskProcessor(db, id);
        processor.ExecuteLongRunningProcessThatReadsDbAndCreatesSomeNewRecords();
        db.SaveChanges();
    }
});
Run Code Online (Sandbox Code Playgroud)

我对此进行了研究,并且我同意 DbContext 不是线程安全的。我建议的模式确实使用多个线程,但单个 DbContext 仅由单个线程以单线程方式访问。领导告诉我,DbContext 本质上是一个单例,这段代码最终会弄乱数据库。我找不到任何东西来支持这个说法。这件事上的领导正确吗?

谢谢

c# parallel-processing multithreading entity-framework entity-framework-6

5
推荐指数
1
解决办法
8768
查看次数

这是一个格式良好的多部分/表单数据请求吗?

边界标记可以出现在前一个字段数据的末尾吗?请注意,为了简洁起见,我删除了 XML 数据的大部分正文。所讨论的边界标记是紧接在 XML 结束标记之后的边界标记 - 那里有边界标记是否有效,还是应该单独位于下一行?

Connection: Keep-Alive
Content-Length: 5466
Content-Type: multipart/form-data; boundary=----------9042941111365854226
------------9042941111365854226
Content-Disposition: form-data; name="xml"

<?xml version="1.0" encoding="ISO-8859-1"?><srvhandle>...</srvhandle>------------9042941111365854226
Content-Disposition: form-data; name="objname"

auditevent
------------9042941111365854226--
Run Code Online (Sandbox Code Playgroud)

http multipartform-data

3
推荐指数
1
解决办法
5194
查看次数

反应性扩展开销?

我希望以下LINQPad代码能够在1秒内完成执行.但是在我的机器上一直需要15秒才能完成.我在这里缺少什么 - 这只是RX开销吗?

int count = 0;
ManualResetEvent done = new ManualResetEvent(false);
Observable.Interval(TimeSpan.FromMilliseconds(1))
    .Take(1000)
    .Subscribe((next) => count++, () => done.Set());
done.WaitOne();
count.Dump("Items observed");
Run Code Online (Sandbox Code Playgroud)

system.reactive

1
推荐指数
1
解决办法
283
查看次数