我有一个相对较大的实体框架模型(大约 300 个表),我为其预先生成视图以提高查询/应用程序性能。
当应用程序处于最小负载时,我会在 6-7 小时内体验到应用程序内的内存消耗逐渐增加。达到约。4GB,应用程序池被重置并重复该过程。
图 1:显示 8-9 小时内的应用程序内存消耗
此应用程序使用存储库模式的变体,并确保我的 ObjectContext 实例在每个事务可行的最短时间内重新实例化和销毁。我还在所有存储库/接口上实现 IDisposable 以清理任何资源。
我已经使用内存分析器(例如 Red Gate 的 ANTS 配置文件、WinDbg 等)对应用程序进行了广泛的测试,到目前为止还无法确定内存问题的确切原因,但是注意到以下几点:
Red Gate ANTS 分析器测试表明,创建了太多的实体框架元数据工作空间,导致需要保存大量额外的对象映射和关联的 SQL 命令文本。在包含 MetadataWorkspace 的特定存储库中还有一个 myEntities 实例,并且 InitializerMetadata 缓存在压力测试结束时包含 351 个条目。这 351 个条目每个都有另一个 myEntities 副本,每个条目都有一个 MetadataWorkspace,每个条目都有数百个对象映射。
我的核心解决方案结构如下:
- 演示文稿 - ASP.NET MVC 3
- 业务 - 对象、视图模型、接口
- 基础设施 - 实体框架模型
- 数据访问 - ADO.NET 直接数据访问
如果有人能够提供任何指示,我将不胜感激。