1

我有一個大型的3D數據陣列,我將隨機讀取和寫入數據。按照設計,這些操作中的大約5%將超出此數組的範圍,並且將以不同的方式處理。這是一個適合使用try/catch塊的地方嗎?否則,我需要6個單獨的'if'語句來檢查數組邊界的地址。如果語句與Try/Catch檢查數組邊界

也許我試圖在這裏進行微觀優化,但這些操作可能每秒發生數萬次。另外,它會使代碼略爲乾淨。我在這裏使用C#,但我想這是一個與語言無關的問題。

+0

你可能想看看http://stackoverflow.com/questions/891217/how-expensive-are-exceptions-in-c –

回答

3

有趣的是,你的問題一方面是而不是語言獨立。在諸如C,Java,C++,C#等語言中,人們更喜歡「LBYL」(Look Before You Leap)模式;而像python這樣的語言則嚴重強調「EAFP」(它比容許更容易提出寬恕)。

含義:在Python中,你正在使用try/catch 很多(甚至「for counting for loop」被實現爲try/catch);而在C#中,您更願意使用if/else來代替。

這些約定非常重要 - 大多數Cx語言程序員只是假設您不使用try/catch來建模控制流。

但回到你的核心要求:去if/else。正如你指出的那樣,表現很好可能是一個問題;您只需要避免more expensive try/catch解決方案。

而且如上所述;作爲這樣做的好副作用,你的代碼將會是「更主流」;因此你的代碼的讀者不會每分鐘給你很多WTFs。

code quality by WTFs per minute

+0

感謝您的快速響應,這是非常有趣的。這是否僅僅是按照慣例?或者實際上雙方都有明顯的性能優勢? – Camander

+0

我正在更新我的答案,同時處理該部分。這裏的表現很重要。 – GhostCat