【发布时间】:2025-12-30 22:05:07
【问题描述】:
我正在从 API 中获取电影元数据,并使用以下代码使用实体框架将它们添加到数据库中
此代码在调用一部电影时会占用高达 20% 的 CPU。我为一个插入使用一个上下文。 Add() 和 DBSet.Local.Where(..) 方法在这里是最昂贵的。如何优化代码以减少 CPU。
更新:在代码分析中,我发现 DBSet.Local.Where(..) 是 CPU 消耗的地方。我调用 DBSet.Local.Where 的原因是要找出我是否已经添加了该对象(人),这样我就不会重新添加它。想法?
【问题讨论】:
-
在我看来,您在全球范围内持有一个
DbContext并一次又一次地重复使用它。这是不好的。你应该new一个在本地范围内,用它做少量的工作,SaveChanges,然后Dispose并丢弃,最好使用using语句并将其保持在 local 范围内.这些上下文并非旨在长期存在。 -
通过延迟加载,这段代码每次插入必须进行数十次甚至更多的查询。延迟加载和性能不能很好地结合在一起。
-
这是一个 asp.net 网站。我确实有一个长寿的背景。但我没有在这个中使用它。为每个电影 addorupdate 调用提供一个新的上下文。
-
虽然延迟加载可能是一个问题,但代码分析器显示这行代码最消耗 CPU:var LocalDBPerson = Context.Persons.Local.Where(My => My.ID == APICast .Id).FirstOrDefault();
标签: c# entity-framework query-optimization local