Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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上声明字符串的局部常数有什么好处吗#_C#_.net_String_Performance_Clr - Fatal编程技术网

C# 在局部变量C上声明字符串的局部常数有什么好处吗#

C# 在局部变量C上声明字符串的局部常数有什么好处吗#,c#,.net,string,performance,clr,C#,.net,String,Performance,Clr,在字符串上使用常量对性能有什么明显的好处吗。假设以下情况 public void MethodUsingConstant() { const string searchedText = "foo"; //some operations using searchedText string } public void MethodNoUsingConstant() { string searchedText = "foo"; //some operations using se

在字符串上使用常量对性能有什么明显的好处吗。假设以下情况

public void MethodUsingConstant()
{
  const string searchedText = "foo";

  //some operations using searchedText string
}

public void MethodNoUsingConstant()
{
  string searchedText = "foo";

  //some operations using searchedText string
}
还可以选择将其带到class struct常量字段


或者,我应该避免过度思考这些微观优化吗

如果你仔细想想,应该不会有太大的不同。这是因为当计算机看到一个变量时,它会检索它的内存地址,然后是值。我已经尝试过这段代码,但差异非常小(小于3ms:顺便说一句,代码运行时间约为107 ms),可能会导致数百万其他变量:

        //Just changed to non const
        const string s = "hello";

        string full = "";

        int k = 0;

        for(int i = 0; i < 10000; i++)
        {
            full += s;
        }
//刚刚更改为非常量
常量字符串s=“你好”;
字符串满=”;
int k=0;
对于(int i=0;i<10000;i++)
{
满+=s;
}
一般来说,const与non-const的区别在于:该值是否始终保持不变:将其设置为
const
,否则就保留它。这是一个很好的例子


总而言之,只有当您的代码无法以任何其他方式进行优化时,您才应该深入了解这些微小的细节,而在这种情况下,您的代码就可以了。

只有当您遇到明显的、可测量的性能问题时才进行优化。即使这样,也要找出性能瓶颈并只对其进行优化。如果有,这将是一个非常极端的“优化”——两个字符串都将被插入,并且在运行时您将得到相同的引用。如果你对两个例子都进行了优化并查看了IL,那么它们是相同的。在程序正确性方面存在差异。通过声明为常量,您的意图是明确的:这是一个静态值,而不是一个可以在代码中途设置为不同值的变量。@Scott:“仍然可以更改字符串的值”--不在标准、安全的C#代码的约束范围内。
字符串
类型是不可变的。要更改
string
实例的值,需要使用反射或其他邪恶手段故意绕过语言语义。有一个永远不会过早的优化:优化可读性。如果一个变量是不可变的,则通过使其
const
来传达该意图@哈切特:无论哪种方式,程序都是正确的。在程序正确性方面根本没有区别。