我现在正在签订一份合同,以提高使用 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
边界标记可以出现在前一个字段数据的末尾吗?请注意,为了简洁起见,我删除了 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) 我希望以下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)