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 关注
- 324 浏览
添加回答
举报