繁体   English   中英

使用Factory Pattern和If-else或switch时.NET JIT的区别

[英].NET JIT difference while using Factory Pattern and If-else or switch

我只是在徘徊,如果我有一种方法可以基于一个枚举(假设每个案例平均有5行代码)来处理100个不同的案例,那是否会对性能产生实际影响? 如何使用Factory或Strategy模式而不是将所有代码都用一种方法呢?

JIT仅编译当时实际需要的代码。 那么我想它将编译100个案例的钻孔方法吧? 它实际上不知道该方法的哪一部分需要正确吗? 但是如果我要拆分该方法,它将实际上编译所需的内容,对吗? 例如,有一个动作下拉菜单(100个汽车品牌的列表)

在性能方面,这又如何比较?

谢谢。

恐怕您错过了Jit所做的重要工作。 它将与CPU和平台无关的cil编译为机器和平台特定的机器代码。

JIT仅编译当时实际需要的代码。

是的,第一次调用您的方法,然后Jit对其进行编译,因此命名为Just-In-Time Compiler

那么我想它将编译100个案例的钻孔方法吧?

是。

它实际上不知道该方法的哪一部分需要正确吗? 但是如果我要拆分该方法,它将实际上编译所需的内容,对吗?

现在,这里出现了混乱,是的,它将编译整个方法,但是请注意,每次应用程序启动仅一次。 由于Jit在运行时进行编译,因此可以说第一次调用该方法对性能的影响可以忽略不计 ,因此可以说将此方法拆分为多个方法将需要多次Jit编译。

话虽如此,如果您正在处理一些对性能应用程序非常高的需求,并且担心Jit的缺点,则可以始终使用ngen并在应用程序启动之前编译本机映像,然后CLR可以使用这些映像来加速进程。您和这将删除Jit编译,因为它基本上是在启动应用程序之前完成的。 我可以看到这对于关心冷启动的应用程序(如托管在服务平台上的应用程序)如何有用,但就我在现实世界中的例子而言,这还可以。

最后,

在性能方面,这又如何比较?

老实说,我永远不会担心Jit编译的影响,我宁愿专注于我正在使用的数据结构或我拥有的特定领域逻辑,以提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM