亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

實例化大量變量(字符串、整數等)會消耗大量內存嗎?

實例化大量變量(字符串、整數等)會消耗大量內存嗎?

C#
LEATH 2021-12-25 16:38:07
我一直在考慮讓我的代碼更具可讀性。我有很多 foreach 和 for 循環,因為我在我的代碼中處理了很多數據表。如果我實例化我將在循環內使用的列名,是否可以?還是會消耗太多內存?例如:DataTable fooTable = new DataTable();foreach(DataRow dr in fooTable.Rows){   string nameColumn = dr.Field<string>("NAME")   Console.WriteLine(nameColumn)}對比DataTable fooTable = new DataTable();foreach(DataRow dr in fooTable.Rows){   Console.WriteLine(dr.Field<string>("NAME"))}
查看完整描述

3 回答

?
慕少森

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

很可能(當然在調試模式下)有一個未命名的局部變量用于存儲未命名變量dr.Field<string>("Name")的版本中的結果。

即便如此,該變量在此方法中只存在一次。您不會每次通過循環都獲得一個新變量。


查看完整回答
反對 回復 2021-12-25
?
慕妹3146593

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

nameColumn在這種情況下,您絕對應該使用臨時變量。

每次調用 時dr.Field<string>("NAME"),運行時都必須構造一個迭代器并對一組對象執行字符串匹配算法,以便找到要訪問的正確字段。訪問Field方法造成的開銷遠遠超過臨時變量可能造成的任何影響。

因此,如果您打算nameColumn在多個地方使用,那么變量就是您所需要的。即使你不重復使用它,一開始就把它放進去也不是一個壞習慣。

添加變量不太可能產生任何負面影響。無論如何,編譯器甚至可能最終生成相同的 IL。


查看完整回答
反對 回復 2021-12-25
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

內存是在實例化對象時分配的,而不是在引用它時分配。因此,無論您有多少對同一實例的引用,內存都不會增加。

這意味著考慮到它們的內存占用,以下兩行是相同的:

MyClass a = new MyClass();
Console.WriteLine(a);

Console.WrileLine(new MyClass());

在這兩種情況下,您的類都只有一個實例,而不是兩個。因此,內存消耗選項正是類的一個實例(加上一些參考本身的少量數量,在 4 字節的 32 位機器上,在 64 位 8 字節上)。

在您的情況下,調用dr.Field<string>("NAME"). 然而,在您的第一個代碼中,對象被引用,因此它可能會在幾納秒后被垃圾收集(當循環進行下一次迭代時)。

話雖如此,當您有一百萬個引用都引用完全相同的對象時,您的內存不太可能增加很多(如果有的話)。


查看完整回答
反對 回復 2021-12-25
  • 3 回答
  • 0 關注
  • 353 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號