2011-11-17 75 views
2

如果我有一段代碼做了這樣的事情。異常處理程序導致任何性能下降?

try 
{ 
... 
} 
catch(Exception ex) 
{ 
throw; 
} 

事實上,在catch塊我們只做了一個throw,我似乎無法找到這個特殊的異常處理程序的任何優勢。有沒有任何性能問題成爲代碼流的不必要的原因?

+2

除了表現,它也只是簡單的愚蠢。 – vcsjones

+0

我知道;我看到有人在做這件事。想要確保我理解它的所有可能的副作用 –

+0

我會想象如此,但如果您想了解幅度,我建議您編寫一個簡單的控制檯應用程序基準測試。儘管如此,這聽起來像是死的代碼。也許它被添加來幫助調試一個特定的問題(在throw上設置一個斷點),那麼問題就解決了,代碼被留下了? –

回答

7

可能導致當異常被拋出的性能損失 - 但如果被拋出往往不夠一個例外,要成爲一個問題,它可能是已經問題事先(例外一般應造成顯着的性能下降,因爲它們只能在特殊情況下使用)。

可能導致即使一個異常不是拋出一個性能命中,因爲它可以防止方法被內聯。

確實導致可讀性/簡單性問題 - 這是擺脫它的主要原因。也許它出於調試目的,但沒有理由在檢入代碼中使用它。這是醜陋的和毫無意義的,所以一定要刪除。

+1

+1。即將發佈類似的東西,但像往常一樣,Jon Skeet的答案非常出色。 – Polynomial

+0

謝謝喬恩。我想了解的是try-catch塊中的代碼與相同的代碼不在try-catch塊中的情況 –

+0

@SilverlightStudent:當catch塊剛剛拋出時,不會有太多的語義差異 - 除了你可以在那裏放置一個斷點。 –