3 回答

TA貢獻2019條經驗 獲得超9個贊
很可能(當然在調試模式下)有一個未命名的局部變量用于存儲未命名變量dr.Field<string>("Name")
的版本中的結果。
即便如此,該變量在此方法中只存在一次。您不會每次通過循環都獲得一個新變量。

TA貢獻1820條經驗 獲得超9個贊
nameColumn
在這種情況下,您絕對應該使用臨時變量。
每次調用 時dr.Field<string>("NAME")
,運行時都必須構造一個迭代器并對一組對象執行字符串匹配算法,以便找到要訪問的正確字段。訪問Field
方法造成的開銷遠遠超過臨時變量可能造成的任何影響。
因此,如果您打算nameColumn
在多個地方使用,那么變量就是您所需要的。即使你不重復使用它,一開始就把它放進去也不是一個壞習慣。
添加變量不太可能產生任何負面影響。無論如何,編譯器甚至可能最終生成相同的 IL。

TA貢獻1982條經驗 獲得超2個贊
內存是在實例化對象時分配的,而不是在引用它時分配。因此,無論您有多少對同一實例的引用,內存都不會增加。
這意味著考慮到它們的內存占用,以下兩行是相同的:
MyClass a = new MyClass(); Console.WriteLine(a);
和
Console.WrileLine(new MyClass());
在這兩種情況下,您的類都只有一個實例,而不是兩個。因此,內存消耗選項正是類的一個實例(加上一些參考本身的少量數量,在 4 字節的 32 位機器上,在 64 位 8 字節上)。
在您的情況下,調用dr.Field<string>("NAME")
. 然而,在您的第一個代碼中,對象被引用,因此它可能會在幾納秒后被垃圾收集(當循環進行下一次迭代時)。
話雖如此,當您有一百萬個引用都引用完全相同的對象時,您的內存不太可能增加很多(如果有的話)。
- 3 回答
- 0 關注
- 353 瀏覽
添加回答
舉報