c# - C# 中的 typeof() 运算符是在堆上分配一个新的 Type 对象,还是返回一个现有的对象?

标签 c# reflection garbage-collection xna typeof

应该是不言自明的,但这是在实时 XNA 代码的上下文中,我想在其中避免分配以避免触发 GC。所以我想知道与已加载类型关联的托管 Type 对象是否始终存在于运行时,或者 typeof() 是否实际上在堆上构造了一个新的 Type 对象(大概来自运行时的一些非托管元数据),这将被垃圾收集。随意指出甚至问这个问题所揭示的任何无知的假设/误解 =)

最佳答案

来自 C# 4 规范第 7.6.11 节:

There is only one System.Type object for any given type. This means that for a type T, typeof(T) == typeof(T) is always true.

(此外,如果您通过反射获取类型,它也将始终获取相同的 Type 对象,但这不在规范中。)

关于c# - C# 中的 typeof() 运算符是在堆上分配一个新的 Type 对象,还是返回一个现有的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856061/

相关文章:

c# - 在没有 async/await 的情况下异步等待 Task<T>

.net - 修改现有的 .NET 程序集

c# - .NET 有没有类似于 Java 的垃圾收集日志的东西?

for循环中的Javascript内存使用

c# - UWP 中的弱事件模式

带锁的 C# Visual Studio 调试器 UI 行为

go - 如何在 Go 中使用反射将结构的 nil 指针设置为结构的零值?

c# - 反射 PropertyInfo.GetValue

java.lang.OutOfMemoryError GC 开销限制超过 Java 堆空间?

c# - 尝试删除文件时访问被拒绝