我有一个用 C# 和 Entity Framework 4.0 编写的多线程控制台应用程序。昨天,当我监视程序几个小时时,它使用了大约 100MB,但今天早上它变成了 500MB。只是想知道 EF 是否最终会因为缓存而变大?或者我应该以某种方式刷新它?
提前致谢。
我有一个用 C# 和 Entity Framework 4.0 编写的多线程控制台应用程序。昨天,当我监视程序几个小时时,它使用了大约 100MB,但今天早上它变成了 500MB。只是想知道 EF 是否最终会因为缓存而变大?或者我应该以某种方式刷新它?
提前致谢。
除非您有正当理由监控内存使用情况,否则通常没有。垃圾收集器将在需要内存时启动,并清空未使用的内存。
只要您不在某处保留对未使用对象的引用,内存使用不应成为垃圾收集环境中的问题。
您如何检查内存使用情况,如果您使用的是任务管理器,那么它不会反映正确的内存使用情况。如果您对 .Net 使用一些内存分析器会更好,另请参阅What Are Some Good .NET Profilers? . 您也可以尝试dotTrace来查看哪个对象正在占用内存。
尝试 ContextOptions.LazyLoadingEnabled
在您的数据上下文下禁用并查看它是否有帮助,但我仍然认为使用内存分析器可以让您清楚地了解您的应用程序正在发生什么。
是的,EF 会缓存您查询的实体,也许这是一个原因,您可以在 dbcontext.config 和 c 中将其关闭任何影响。