You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6+EF新增迁移后单元测试突发OutOfMemoryException求助

解决方案

1. 切换测试运行器到64位模式

32位进程内存上限约2GB,380个EF迁移叠加3360个测试极易触发内存不足:

  • Visual Studio:测试菜单 → 测试设置 → 默认处理器架构 → 选择X64
  • 命令行运行dotnet test时,添加--arch x64参数,或确保项目目标平台设为64位

2. 剥离测试环境的EF迁移依赖

单元测试无需加载全部历史迁移,优化DbContext配置:

  • 测试项目中配置DbContext时,使用UseInMemoryDatabase或UseSqlite直接初始化空白数据库,跳过AddMigrations调用
  • 若必须应用迁移,仅加载核心初始化迁移,而非自动扫描全部380个迁移(通过AddMigrations指定具体迁移类实现)

3. 规范DbContext的生命周期管理

  • 每个测试结束后强制Dispose DbContext,避免内存泄漏;用xUnitIClassFixture或NUnitSetUp/TearDown复用初始化逻辑,减少重复创建开销
  • 替换InMemory数据库为SQLite内存库:InMemory不会自动清理,SQLite可通过关闭连接直接释放内存,降低内存堆积

4. 排查新增迁移的异常触发点

  • 临时删除新增的空迁移,验证测试是否恢复正常,确认是否为该迁移的元数据处理导致内存溢出
  • 清理项目bin/obj目录,重建解决方案,清除EF迁移缓存

5. 优化IDesignTimeDbContextFactory的环境适配

确保Factory仅在设计时生效,测试环境返回轻量化实例:

  • 在Factory类中判断运行环境,仅在设计时(如执行add-migration命令)加载完整迁移配置,测试环境返回不包含迁移依赖的DbContext

内容的提问来源于stack exchange,提问作者Chi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:25:04