第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查DBNull然后分配給變量的最有效方法?

檢查DBNull然后分配給變量的最有效方法?

尚方寶劍之說 2019-10-05 15:02:27
這個問題有時會出現(xiàn),但是我還沒有找到滿意的答案。典型的模式是(行是DataRow): if (row["value"] != DBNull.Value) {      someObject.Member = row["value"]; }我的第一個問題是哪個效率更高(我已經翻轉了條件):  row["value"] == DBNull.Value; // Or  row["value"] is DBNull; // Or  row["value"].GetType() == typeof(DBNull) // Or... any suggestions?這表明.GetType()應該更快,但是也許編譯器知道一些我不知道的技巧?第二個問題,是否值得緩存row [“ value”]的值,或者編譯器是否仍然優(yōu)化了索引器?例如:  object valueHolder;  if (DBNull.Value == (valueHolder = row["value"])) {}筆記:row [“ value”]存在。我不知道列的列索引(因此查找列名)。我在問有關檢查DBNull然后分配的問題(不是關于過早的優(yōu)化等)。我對一些場景進行了基準測試(時間以秒為單位,進行了10,000,000次試用):row["value"] == DBNull.Value: 00:00:01.5478995row["value"] is DBNull: 00:00:01.6306578row["value"].GetType() == typeof(DBNull): 00:00:02.0138757Object.ReferenceEquals具有與“ ==”相同的性能最有趣的結果?如果您按大小寫不匹配列名(例如,使用“值”而不是“值”,則花費的時間大約是字符串的十倍):row["Value"] == DBNull.Value: 00:00:12.2792374這個故事的寓意似乎是,如果您無法通過其索引查找列,那么請確保饋入索引器的列名稱與DataColumn的名稱完全匹配。緩存值似乎也快了將近一倍:No Caching: 00:00:03.0996622With Caching: 00:00:01.5659920因此,最有效的方法似乎是: object temp; string variable; if (DBNull.Value != (temp = row["value"])) {      variable = temp.ToString(); }
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

您應該使用以下方法:


Convert.IsDBNull()

考慮到它是框架的內置組件,我希望它是最有效的。


我建議采取以下措施:


int? myValue = (Convert.IsDBNull(row["column"]) ? null : (int?) Convert.ToInt32(row["column"]));

是的,編譯器應該為您緩存它。


查看完整回答
反對 回復 2019-10-05
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

編譯器不會優(yōu)化掉索引(也就是說,如果你使用行[“價值”]兩次),所以是的,它是稍微快做:


object value = row["value"];

然后使用價值兩次;如果為null,使用.GetType()可能會引發(fā)問題。


DBNull.Value實際上是一個單例,因此要添加第4個選項-您也許可以使用ReferenceEquals-但實際上,我認為您在這里擔心太多...我認為“ is”,“ ==”之間的速度不會有所不同“等將成為您看到的任何性能問題的原因。分析您的整個代碼并專注于重要的事情...并非如此。


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 520 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號