.net 大量使用泛型类的应用程序的启动时间是否比使用非泛型类的应用程序慢

y1aodyip  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(143)

我们已经知道使用泛型类与非泛型类在性能方面的好处。避免强制转换给予更好的性能,但是泛型类的示例化涉及为特定类型T的泛型类发出IL代码然后JIT该代码的运行时开销。这使我得出这样的结论:我正在用启动应用程序的性能来换取以后更好的性能。
此外,我想知道泛型如何与提前编译(如NGEN)一起使用。我假设泛型类不能提前编译,但非泛型类可以。如果泛型类需要JIT,而非泛型类不需要,那么这会对应用程序的启动性能造成额外的影响吗?
此外,任何关于NativeAOT如何与泛型一起工作的见解或信息都将非常感谢。

cwxwcias

cwxwcias1#

嗯,我没有证据,但我认为影响可以忽略不计。编译器(无论是在jit之前还是在jit期间)需要对同一个具体类只翻译一次。当使用泛型时,这意味着(除非应用了某些内部优化)List<string>List<int>是两个不同的类,需要单独转换,但List<string>的多个示例是相同的类型。
因此,这可能意味着启动一个使用许多不同List<T>类型的应用程序比仅包含ArrayList的应用程序需要多花一点点时间。但是在后一种情况下,所有必需的强制转换对性能的影响肯定要高得多,更不用说编译时类型安全了。如果你到处创建ListOfStringListOfInt类型,你不会得到任何东西--它们仍然是独立的类型。

相关问题