簡體   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