C# 将变量指定给控制值,然后使用变量是否比直接使用控制值慢?(in.NET)

C# 将变量指定给控制值,然后使用变量是否比直接使用控制值慢?(in.NET),c#,performance,optimization,variables,C#,Performance,Optimization,Variables,假设我们有3800000个文本框。 每个文本框都包含一些单词 我们有一个函数GenerateIRSTaxCode(字符串s、字符串s2、…字符串s380000) 我们有一个按钮,可以将这些3.8MM的texbox传递到generateIRTaxCode()函数中 通过执行以下操作,性能会有什么不同: string s = textbox1.text; string s1 = textbox2.text; ... string s3800000= textbox3800000.text; Gen

假设我们有3800000个文本框。 每个文本框都包含一些单词

我们有一个函数
GenerateIRSTaxCode(字符串s、字符串s2、…字符串s380000)

我们有一个按钮,可以将这些3.8MM的texbox传递到
generateIRTaxCode()
函数中

通过执行以下操作,性能会有什么不同:

string s = textbox1.text;
string s1 = textbox2.text;
...
string s3800000= textbox3800000.text;

GenerateIRSTaxCode(s1, s2, ... s3800000)
VS

 GenerateIRSTaxCode(textbox1.text, textbox2.text, ... textbox3800000.text)
编辑:

所以我做了一些测试:

  {

            for (int j = 0; j < 5; j++)
            {

                DateTime starttime1 = DateTime.Now;
                List<string> words = new List<string>();
                for (int i = 0; i < 4000000; i++)
                {
                    string s = textBox2.Text;
                    words.Add(s);

                }
                DateTime endtime1 = DateTime.Now;

                DateTime starttime2 = DateTime.Now;

                for (int i2 = 0; i2 < 4000000; i2++)
                {
                    words.Add(textBox2.Text);

                }
                DateTime endtime2 = DateTime.Now;

                TimeSpan elapsed1 = endtime1 - starttime1;
                TimeSpan elapsed2 = endtime2 - starttime2;
                TimeSpan performancehit = elapsed1 - elapsed2;


                textBox1.AppendText("Assign Time start: " + starttime1 + "\r\nAssign Time End: " + endtime1 + "\r\n elapsed time: " + elapsed1.ToString() +
                    "\r\n NoAssign Time start: " + starttime2 + "\r\nNoAssign Time End: " + endtime2 + "\r\n elapsed time: " + elapsed2.ToString() +"\r\n Performance Hit: " + performancehit.ToString());

            }

            textBox1.AppendText("Performance Complete");
        }
{
对于(int j=0;j<5;j++)
{
DateTime starttime1=DateTime.Now;
列表单词=新列表();
对于(int i=0;i<4000000;i++)
{
字符串s=textBox2.Text;
字。加上(s);
}
DateTime endtime1=DateTime.Now;
DateTime starttime2=DateTime.Now;
对于(int i2=0;i2<4000000;i2++)
{
words.Add(textBox2.Text);
}
DateTime endtime2=DateTime.Now;
TimeSpan elapsed1=endtime1-starttime1;
TimeSpan elapsed2=endtime2-starttime2;
TimeSpan performancehit=elapsed1-elapsed2;
textBox1.AppendText(“分配时间开始:+starttime1+”\r\n分配时间结束:+endtime1+”\r\n已用时间:+elapsed1.ToString()+
“\r\n无指定时间开始:“+starttime2+”\r\n指定时间结束:“+endtime2+”\r\n经过的时间:“+elapsed2.ToString()+”\r\n性能命中:“+performancehit.ToString());
}
textBox1.AppendText(“性能完成”);
}
我的结果:

分配时间开始:2011年12月28日9:39:19下午分配时间结束:2011年12月28日9:39:32下午经过时间:00:00:13.6545000无分配时间开始:2011年12月28日9:39:32下午无分配时间结束:2011年12月28日9:39:46下午经过时间:00:00:13.6080000
性能点击:00:00:00.0465000

分配时间开始:2011年12月28日9:39:46下午分配时间结束:2011年12月28日9:40:00下午经过时间:00:00:13.7054000无分配时间开始:2011年12月28日9:40:00下午无分配时间结束:2011年12月28日9:40:13下午经过时间:00:00:13.6400000 演出点击:00:00:00.0654000

分配时间开始:2011年12月28日9:40:13下午分配时间结束:2011年12月28日9:40:27下午经过时间:00:00:13.6434000无分配时间开始:2011年12月28日9:40:27下午无分配时间结束:2011年12月28日9:40:41下午经过时间:00:00:13.7122000
性能点击: -00:00:00.0688000

分配时间开始:2011年12月28日9:40:41下午分配时间结束:2011年12月28日9:40:54下午经过时间:00:00:13.6544000无分配时间开始:2011年12月28日9:40:54下午无分配时间结束:2011年12月28日9:41:08下午经过时间:00:00:13.6342000 演出点击:00:00:00.0202000

分配时间开始:2011年12月28日9:41:08下午分配时间结束:2011年12月28日9:41:22下午经过时间:00:00:13.6788000无分配时间开始:2011年12月28日9:41:22下午无分配时间结束:2011年12月28日9:41:35下午经过时间:00:00:13.6754000

性能点击:00:00:00.0034000

表演完成

看来这是一个成功的例子。然而,在第三次跑步中,它以另一种方式跑得更快。 也许当时我的电脑上运行的其他东西可能会影响这一点

编辑2

在这上面再做些挖掘。在这里找到Charlie Calvert的一篇非常好的文章:

这与以下事实有关:

C#维护一个叫做“实习生表”的东西。这是一个 当前引用的字符串。如果使用创建新字符串 代码如第18行和第19行所示,则intern表为 选中的。如果您的字符串已经在其中,那么这两个变量都将 指向intern表维护的同一内存块。这个 字符串不重复

假设textbox数据存储为字符串,并且我的s1和textbox1.text字符串都相同,那么它们将引用内存中的同一位置。
因此,至少我们没有对内存造成影响。

我认为0.5%的性能损失(13.6秒中的0.0688秒)不值得通过删除变量来降低可读性和可维护性,即使是3.8MM的变量:)

您是否尝试过创建380万个文本框并进行测量?您有一个包含400万个参数的函数?这是一个理论上的问题。可读性和性能之间有一个权衡。在编写代码并对其进行基准测试之前,只能猜测性能的影响!可悲的是,这是一个相当可疑的基准——充其量也是如此。先读。。是的,它是java,是的,基本上相同的东西仍然适用