C# 直接处理字符串而不是将其分配给var有什么好处吗?

C# 直接处理字符串而不是将其分配给var有什么好处吗?,c#,string,memory-leaks,C#,String,Memory Leaks,这样做有什么好处吗 private void Method() { var data = ConfigurationManager.AppSettings["Data"].Split('-'); } private void Method() { var _data = ConfigurationManager.AppSettings["Data"]; var data = _data.Split('-'); } 而不是这样做 private void Method(

这样做有什么好处吗

private void Method()
{
    var data = ConfigurationManager.AppSettings["Data"].Split('-');
}
private void Method()
{
    var _data = ConfigurationManager.AppSettings["Data"];
    var data = _data.Split('-');
}
而不是这样做

private void Method()
{
    var data = ConfigurationManager.AppSettings["Data"].Split('-');
}
private void Method()
{
    var _data = ConfigurationManager.AppSettings["Data"];
    var data = _data.Split('-');
}
案例:我需要在同一个方法中读取像这样的大量配置值,多次(假设每次我实例化这个类时)


这两种情况将如何影响性能和内存?或者它们几乎是一样的东西?我看到,将其分配给变量将无缘无故地分配内存空间。

编译器将把这些空间减少到完全相同的程度。不,这种情况没有区别。如果您有兴趣,可以在发布模式下编译它,并使用
ildasm
查看它的功能


然而!性能问题永远不能凭直觉回答,甚至不能凭直觉提问。首先,确定你是否真的试图解决一个真正的问题——否则你可能只是在刮牦牛胡子。

在这两种情况下都会生成相同的IL代码


别忘了这两种说法是一样的。您对内存空间的分配时间有错误的理解。这实际上发生在
AppSettings
-调用中,而不是在赋值时。因此,当您对成员进行任何调用时,结果allready存在于内存中。将此值存储在变量中不会增加任何东西—既不会增加内存分配,也不会提高性能

但是,如果您将结果存储在类的成员中,它将被垃圾收集,远远晚于您的本地
数据
-变量,因为它不会超出范围。在这种情况下,只要实例存在,将结果存储到成员将分配内存

话虽如此,在大多数情况下,更重要的是关注代码的可维护性,也就是说,如果其他开发人员不必问这是怎么回事就可以理解它


这意味着您不应该问:但是,哪种代码更容易理解

在自
ConfigurationManager.AppSettings[“Data”]
以来的第一种情况下,将返回一个
字符串
Split()
方法与之链接不会比创建一个额外变量更有害


在第二种情况下,如果将
ConfigurationManager.AppSettings[“Data”]
用于多个位置,则效率更高。在这种情况下,不是一次又一次地获取它,而是获取一次,将它存储到一个变量中,然后重新使用它。

它们实际上是相等的,在这两种情况下,您的操作完全相同。但是,即使有任何不同,它是如此之小,你不应该为此烦恼。但是,您应该专注于代码的可读性和可理解性。第二种方法将帮助您添加额外的验证检查,例如,如果ConfigurationManager.AppSettings[“Data”]为空,则第一种方法将失败,在第二种方法中,您可以始终检查数据是否也为空,第二种方法使您更容易在调试器中看到中间结果。@MatthewWatson,不需要,,,而是在调试时使用快速观察窗口。我个人有时会引入“人工”变量,以使调试和检查值更容易。@UweKeim或只是为了增加对代码的理解。