2010-10-22 85 views
2

我有一個.net 3.5 windows應用程序。其中一個模塊使用Oracle存儲過程,它將記錄集返回給C#客戶端。在oracle存儲過程中使用CASE語句

我只是想知道哪一個是以下兩個[wrt中更好的方法。代碼可讀性和性能。]:

1.如果我在存儲過程(SP)本身寫入多個CASE語句,那麼記錄集計數大約是125.這裏,SP的代碼看起來有點混亂。但是積極的一面,返回到客戶端的行數較少。

2.如果我不使用CASE語句,那麼記錄集計數爲@ 375.在這種方法中,我將SP的「case」邏輯移動到C#middler層...可能使用LINQ /委託... 這裏,SP代碼更清晰,但返回的記錄數很高。

那麼,我應該採用方法1還是方法2?

感謝您的閱讀。

回答

4

讓數據庫存儲過程返回太多數據,然後讓中間層/客戶端進程敲出箔條是不好的策略。不僅僅是因爲這個過程會比過濾數據庫中的結果集花費更長的時間來懲罰用戶,而且會不必要地消耗可用於滿足其他用戶活動的資源(網絡帶寬,應用服務器週期)。

「這裏,SP代碼更乾淨,但返回的記錄數很高。」

代碼衛生是在旁觀者的眼中。我更喜歡有自己正確的程序單元,而不是依靠外部過程來做正確的事情。特別是駐留在其他架構層上的外部進程。

+0

嗨,感謝您的評論......在這種情況下,「網絡帶寬,應用服務器週期消耗」這一論點同樣適用於胖客戶端.net應用程序。確定它會影響基於Web的應用程序。 – Jimmy 2010-10-22 18:22:39

+0

@jimmy - 顯然,如果我們正在談論前端和數據庫位於同一臺物理機器上的應用程序,則影響會大大降低。但是 - 在我看來 - 這並不能扭轉「正確性」的平衡。 – APC 2010-10-22 20:52:16

0

這取決於服務器負載和安全策略。 我更喜歡1),但是如果你需要一個真正可用的sql server,你應該更喜歡2)以點亮sql server的負載。

相關問題