使用工厂模式和 If-else 或 switch 时的 .NET JIT 差异
.NET JIT difference while using Factory Pattern and If-else or switch
我只是在徘徊,如果我有一个方法可以处理 100 个基于枚举的不同案例(假设每个案例平均有 5 行代码),这实际上会影响性能吗?与其将所有代码都放在一个方法中,不如使用工厂或策略模式怎么样?
JIT 只编译此时实际需要的代码。所以我猜它会编译 100 个案例的 hole 方法吧?它实际上不知道该方法的哪一部分是正确的?但是如果我要拆分那个方法,它实际上会编译它需要的东西,对吧?例如,有一个动作下拉列表(100 个汽车品牌的列表)
两者在性能方面的比较如何?
谢谢。
恐怕您错过了 Jit 所做的重要工作。它将 cil CPU 和平台无关的编译成机器和平台 特定的 机器代码。
The JIT only compiles the code which is actually needed at that point.
是的,第一次调用您的方法时,Jit 会对其进行编译,因此得名 即时编译器。
So I guess it will compile the hole method of 100 cases right?
是的。
It wouldn't actually know what part of that method is needed correct ? but if I was to split that method it will actually compile what it is needed right?
现在混乱来了,是的,它将编译整个方法,但请注意,每次应用程序启动时只编译一次。因为,Jit 在运行时编译,我们可以说第一次调用方法时会有一些 可忽略的 性能影响,可以说拆分此方法进入多个方法将需要多次 Jit 编译。
话虽如此,如果您正在处理一些对性能有很高要求的应用程序,并且您担心 Jit 是缺点,您可以始终使用 ngen 并在应用程序启动之前编译本机图像,然后 CLR 可以使用这些图像为您加快流程,这将删除 Jit 编译,因为它基本上是在应用程序启动之前完成的。我可以看到这对于关心冷启动的应用程序有何用处,例如托管在功能即服务平台上的应用程序,但就我所能处理的真实世界示例而言,这就是这些。
最后,
How would that compare to each other in terms of performance?
老实说,我不会担心 Jit 编译的影响,我宁愿关注我正在使用的数据结构或我拥有的领域特定逻辑,以提高我的性能。
我只是在徘徊,如果我有一个方法可以处理 100 个基于枚举的不同案例(假设每个案例平均有 5 行代码),这实际上会影响性能吗?与其将所有代码都放在一个方法中,不如使用工厂或策略模式怎么样?
JIT 只编译此时实际需要的代码。所以我猜它会编译 100 个案例的 hole 方法吧?它实际上不知道该方法的哪一部分是正确的?但是如果我要拆分那个方法,它实际上会编译它需要的东西,对吧?例如,有一个动作下拉列表(100 个汽车品牌的列表)
两者在性能方面的比较如何?
谢谢。
恐怕您错过了 Jit 所做的重要工作。它将 cil CPU 和平台无关的编译成机器和平台 特定的 机器代码。
The JIT only compiles the code which is actually needed at that point.
是的,第一次调用您的方法时,Jit 会对其进行编译,因此得名 即时编译器。
So I guess it will compile the hole method of 100 cases right?
是的。
It wouldn't actually know what part of that method is needed correct ? but if I was to split that method it will actually compile what it is needed right?
现在混乱来了,是的,它将编译整个方法,但请注意,每次应用程序启动时只编译一次。因为,Jit 在运行时编译,我们可以说第一次调用方法时会有一些 可忽略的 性能影响,可以说拆分此方法进入多个方法将需要多次 Jit 编译。
话虽如此,如果您正在处理一些对性能有很高要求的应用程序,并且您担心 Jit 是缺点,您可以始终使用 ngen 并在应用程序启动之前编译本机图像,然后 CLR 可以使用这些图像为您加快流程,这将删除 Jit 编译,因为它基本上是在应用程序启动之前完成的。我可以看到这对于关心冷启动的应用程序有何用处,例如托管在功能即服务平台上的应用程序,但就我所能处理的真实世界示例而言,这就是这些。
最后,
How would that compare to each other in terms of performance?
老实说,我不会担心 Jit 编译的影响,我宁愿关注我正在使用的数据结构或我拥有的领域特定逻辑,以提高我的性能。