在单元测试项目中加载托管程序集似乎会降低Visual Studio 2010的速度

时间:2013-05-19 09:11:51

标签: c# .net unit-testing reflection .net-assembly

我在单元测试中加载多个托管程序集。程序集来自解决方案而非第三方,而不是重要。我注意到Visual Studio在运行这些测试几次(通常是10次)之后会增加内存消耗,并且在构建时间和响应性方面总体上会降低。如果未运行这些特定的单元测试,则此行为不会浮出水面。

加载的程序集用于检索嵌入的类型并创建ONLY Enum类型的实例,因此该程序集中的代码不会导致问题。我尝试了[ReflectionOnlyLoad],但这自然不允许创建类型实例。

显然除非卸载整个app域,否则无法在加载后显式卸载程序集。

我的问题是,单元测试项目是否在VS进程下运行,如果是,那么这些加载的程序集会堆积吗?我会假设单元测试上下文会自行清理。

1 个答案:

答案 0 :(得分:1)

“加载的程序集用于检索嵌入的类型并创建”

的实例

可能是自修改代码问题

如果asm在缓存的非有界部分中运行,则会重写,这会对执行速度产生巨大影响,这对于旁观者没有合理的理由

使用asm,您必须保持动态数据和指令数据分开

读/写动态数据应存储在包含代码的存储器块之外

http://www.bbcbasic.co.uk/bbcwin/manual/bbcwina.html#cache

命中率很高,慢了10倍

基本上asm程序应该是:

分配2048k

[动态数据]

分配4096k

[代码]

任何装配风味

如果你不能这样做,请学习如何,差异就像白天和黑夜