这样做有什么好处;
private void Method()
{
var data = ConfigurationManager.AppSettings["Data"].Split('-');
}
而不是这样做;
private void Method()
{
var _data = ConfigurationManager.AppSettings["Data"];
var data = _data.Split('-');
}
案例:我需要在相同的方法中读取这样的一堆配置值,多次次(假设每次我实例化这个类)。
两种情况如何影响性能和记忆?或者他们几乎是一样的东西?我看到将它分配给变量会无缘无故地在内存上分配空间。
答案 0 :(得分:3)
在这两种情况下都会生成相同的IL代码。
答案 1 :(得分:2)
编译器会将这些减少到完全相同的东西。不,在这种情况下没有区别。如果您有好奇心,请在发布模式下进行编译,并使用ildasm
查看它的作用。
然而!性能问题永远不应该通过预感来回答 - 甚至问预感。首先,确定你是否真的试图解决一个真正的问题 - 否则你可能只是牦牛剃须。
答案 2 :(得分:1)
两种说法都是平等的。你对内存空间的分配有误解。这实际上发生在AppSettings
- 呼叫内部,而不是在分配中。因此,当您对成员进行任何调用时,结果已经存在在内存中。将此值存储在变量中不会增加任何内容 - 无论是内存分配还是性能。
但是,如果你将结果存储在你班级的成员中,那么它将比你的本地data
- 变量更早地被垃圾收集,因为它不会超出范围。在这种情况下,只要实例存在,将结果存储到成员就会分配内存。
说到这一点,在大多数情况下,更重要的是要专注于可维护的代码,即如果其他开发人员可以理解它而不询问所有这些。
这意味着您不应该问:which horse runs faster而是更容易理解哪些代码?
答案 3 :(得分:1)
在第一种情况下,由于string
将返回Split()
,因此使用ConfigurationManager.AppSettings["Data"]
方法链接比创建额外变量没有任何害处。
在第二种情况下,如果将{{1}}用于多个位置,效率会很高。在这种情况下,不是一次又一次地获取它,而是一次获取它,将其存储到变量并重新使用它。