有時我會得到高度重複的代碼塊,特別是在處理DAL代碼時。C#編譯器是否會優化我的代碼可讀性度量?
例如:
command.Parameters.Add("@CName", SqlDbType.NVarChar, 50).Value = c.Name.DisplayName;
command.Parameters.Add("@LKey", SqlDbType.NVarChar, 15).Value = c.Alf;
command.Parameters.Add("@SalesTerritoryId", SqlDbType.NVarChar, 15).Value = c.Profile.SalesTerritoryId;
command.Parameters.Add("@CAQ", SqlDbType.TinyInt).Value = (short)c.Profile.Quadrant;
早在VB中有With語句,可以很好地整理東西。偶爾在C#中,我會做這樣的事情:
var cp = command.Parameters;
cp.Add("@CName", SqlDbType.NVarChar, 50).Value = c.Name.DisplayName;
cp.Add("@LKey", SqlDbType.NVarChar, 15).Value = c.Alf;
cp.Add("@SalesTerritoryId", SqlDbType.NVarChar, 15).Value = c.Profile.SalesTerritoryId;
cp.Add("@CAQ", SqlDbType.TinyInt).Value = (short)c.Profile.Quadrant;
我個人覺得這是更可讀的,但我想知道如果在編譯時,做兩個版本成爲同IL,在編譯器是足夠聰明,知道我做了什麼,並簡單地優化它呢?
或cp作爲一個無用的參考後編譯?
這是抖動優化的工作,而不是C#編譯器。不管它是否優化,它都沒有什麼區別,Parameters.Add()方法中的開銷數量遠遠超過這樣的微優化。顯然,幫助抖動不會造成傷害,也不會影響可讀性。 –
真的很重要嗎?你有沒有發現這段代碼導致性能問題?如果沒有,轉到重要的事情。 – spender
我*認爲*你的可讀性更強,因爲它不必爲每個指令提供'command.Parameters'參數。不知道在什麼時候創建變量的成本抵消了任何收益。 –