Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尽可能晚地声明变量,并将返回方法作为参数传递_C#_Performance - Fatal编程技术网

C# 尽可能晚地声明变量,并将返回方法作为参数传递

C# 尽可能晚地声明变量,并将返回方法作为参数传递,c#,performance,C#,Performance,如果我有这样的代码: string s = MyClass.GetString(); // Returns string containing "hello world"; ProcessString(s); 这比以前慢吗 ProcessString(MyClass.GetString()); 若然,原因为何?在第二个示例中,编译器是否通常从GetString()生成变量;返回字符串的方法 另外,尽可能晚地声明变量有什么好处?这对GC有好处吗?如果是这样的话,怎么做(我是根据GC族假设的)

如果我有这样的代码:

string s = MyClass.GetString(); // Returns string containing "hello world";
ProcessString(s);
这比以前慢吗

ProcessString(MyClass.GetString());
若然,原因为何?在第二个示例中,编译器是否通常从GetString()生成变量;返回字符串的方法

另外,尽可能晚地声明变量有什么好处?这对GC有好处吗?如果是这样的话,怎么做(我是根据GC族假设的)


谢谢

不,编译器将为这两个示例发出相同的IL(请注意,并非所有的示例都是这样,仅此示例)

请记住,C#中的所有局部变量都被打包在方法顶部的IL中,因此当您声明它们时并不重要,因为CLR将在进入方法时为它们分配空间


尽可能晚地声明变量的好处仅仅是为了提高代码的可读性。尽可能靠近使用变量的位置声明变量,这样代码的读者就可以收集有关变量的上下文信息,而不仅仅是变量名称。

谢谢。因此,对于这两个代码示例,它们基本相同。我完全理解您对我第二个问题的回答。:)如果在块的顶部声明变量,然后在以后分配给它们,那么就不必要地调用了它们的默认构造函数。在大多数情况下,George V. Reilly可能会说:“如果你在块的顶部声明变量,然后分配给他们,你就不必要地调用他们的默认构造函数”,但这只是C++中的真实情况。问题被标记为C#,在本例中没有调用构造函数。引用的值仅为null。