我在单元测试中加载多个托管程序集。程序集来自解决方案而非第三方,而不是重要。我注意到Visual Studio在运行这些测试几次(通常是10次)之后会增加内存消耗,并且在构建时间和响应性方面总体上会降低。如果未运行这些特定的单元测试,则此行为不会浮出水面。
加载的程序集用于检索嵌入的类型并创建ONLY Enum类型的实例,因此该程序集中的代码不会导致问题。我尝试了[ReflectionOnlyLoad]
,但这自然不允许创建类型实例。
显然除非卸载整个app域,否则无法在加载后显式卸载程序集。
我的问题是,单元测试项目是否在VS进程下运行,如果是,那么这些加载的程序集会堆积吗?我会假设单元测试上下文会自行清理。
答案 0 :(得分:1)
“加载的程序集用于检索嵌入的类型并创建”
的实例可能是自修改代码问题
如果asm在缓存的非有界部分中运行,则会重写,这会对执行速度产生巨大影响,这对于旁观者没有合理的理由
使用asm,您必须保持动态数据和指令数据分开
读/写动态数据应存储在包含代码的存储器块之外
http://www.bbcbasic.co.uk/bbcwin/manual/bbcwina.html#cache
命中率很高,慢了10倍
基本上asm程序应该是:
分配2048k
[动态数据]
分配4096k
[代码]
任何装配风味
如果你不能这样做,请学习如何,差异就像白天和黑夜