关于 if 和 ? 的速度比较:
Speed comparison about if and ?:
出于测试目的,我编写了一个简单的代码。第一种方法更适合编码标准。第二种方法是传统方式。我使用秒表进行比较,我尝试了所有方法但无法弄清楚为什么方法 2(传统)比方法 1 快? (if) 比 ?: 运算符快吗?
我的表单设计;
我的代码;
namespace WindowsFormsApplication3
{
using System;
using System.Diagnostics;
using System.Windows.Forms;
internal partial class Form1 : Form
{
private void Button1Click(object sender, EventArgs e)
{
var sw = new Stopwatch();
sw.Start();
Method1();
sw.Stop();
listBox1.Items.Add($"Method1 -> {sw.Elapsed}");
sw.Reset();
sw.Start();
Method2();
sw.Stop();
listBox1.Items.Add($"Method2 -> {sw.Elapsed}");
}
private void Method1()
{
pictureBox.Visible = !pictureBox.Visible;
button1.Text = this.button1.Text == "Close" ? "Open" : "Close";
}
private void Method2()
{
if (pictureBox.Visible)
{
pictureBox.Visible = false;
button1.Text = "Open";
}
else
{
pictureBox.Visible = true;
button1.Text = "Close";
}
}
}
}
谁能给我解释一下为什么 Method2(传统)比 Method1 好?谢谢
编辑:
改成了这个,但方法 1 仍然更快。
private void Method2()
{
if (pictureBox.Visible)
{
pictureBox.Visible = false;
if (this.button1.Text == "Close")
{
this.button1.Text = "Open";
}
else
{
this.button1.Text = "Close";
}
}
else
{
pictureBox.Visible = true;
if (this.button1.Text == "Close")
{
this.button1.Text = "Open";
}
else
{
this.button1.Text = "Close";
}
}
我觉得不是比较次数的问题
在方法 1 中,您正在进行字符串比较以检查控件的状态。
在方法 2 中,您正在进行布尔比较。
后者会更快
出于测试目的,我编写了一个简单的代码。第一种方法更适合编码标准。第二种方法是传统方式。我使用秒表进行比较,我尝试了所有方法但无法弄清楚为什么方法 2(传统)比方法 1 快? (if) 比 ?: 运算符快吗?
我的表单设计;
我的代码;
namespace WindowsFormsApplication3
{
using System;
using System.Diagnostics;
using System.Windows.Forms;
internal partial class Form1 : Form
{
private void Button1Click(object sender, EventArgs e)
{
var sw = new Stopwatch();
sw.Start();
Method1();
sw.Stop();
listBox1.Items.Add($"Method1 -> {sw.Elapsed}");
sw.Reset();
sw.Start();
Method2();
sw.Stop();
listBox1.Items.Add($"Method2 -> {sw.Elapsed}");
}
private void Method1()
{
pictureBox.Visible = !pictureBox.Visible;
button1.Text = this.button1.Text == "Close" ? "Open" : "Close";
}
private void Method2()
{
if (pictureBox.Visible)
{
pictureBox.Visible = false;
button1.Text = "Open";
}
else
{
pictureBox.Visible = true;
button1.Text = "Close";
}
}
}
}
谁能给我解释一下为什么 Method2(传统)比 Method1 好?谢谢
编辑:
改成了这个,但方法 1 仍然更快。
private void Method2()
{
if (pictureBox.Visible)
{
pictureBox.Visible = false;
if (this.button1.Text == "Close")
{
this.button1.Text = "Open";
}
else
{
this.button1.Text = "Close";
}
}
else
{
pictureBox.Visible = true;
if (this.button1.Text == "Close")
{
this.button1.Text = "Open";
}
else
{
this.button1.Text = "Close";
}
}
我觉得不是比较次数的问题
在方法 1 中,您正在进行字符串比较以检查控件的状态。
在方法 2 中,您正在进行布尔比较。
后者会更快