类型实例的内存管理



我们正在进行反射项目,需要从不同类型调用不同的方法,也需要从不同的程序集调用。

因此,我们现在要做的是从Assemblys加载所有类型,并在应用程序加载时将它们缓存在内存中,以便在反射时读取。

目前我们正在使用Dictionary<string, Type> TypesCache;,它保存类型名称和类型实例程序集声明的类型。

所以我有疑问。而不是在应用程序启动时将所有类型保存到字典中如果我们维护Dictionary<string, string>-的字典,它将包含类型名称和AssemblyQualifiedName

运行时基于所需的类型,我们将从AssemblyQualifiedName中获取类型,然后将其缓存在TypesCache中(如按需(

在新的实现中内存会减少吗?

当我们在应用程序加载时准备TypesCache的缓存时,它会保存完整的类型实例还是Loaded Assemblys类型中类型实例的引用?

在新的实现中内存会减少吗?

可能。类型对象可能比该类型的字符串更大。但要想得到准确答案,最简单的方法就是做一次测试。为每个备选方案创建一个简单的应用程序,并检查使用的内存,或者使用内存探查器。

一个可能更重要的问题是";使用的内存量是否很大&";。你有记忆力问题吗?你有没有使用内存探查器来检查内存的用途?您是否确定类型缓存代表了内存的重要部分?或者你只是在猜测?

优化的第一条规则是在做任何事情之前先进行测量。否则,你就不知道自己是否有所改进。关于问题所在的假设是错误的,这是很常见的。

最新更新