C#代码优化

C#代码优化,c#,.net,optimization,C#,.net,Optimization,谁能跑得更快?为什么 1: 或 2: 两者都没有,除了可读性的损失(特别是在JITing之后),它们之间没有真正的区别。2可能更快,因为在将对象传递给g.DrawLine之前,您没有创建指向该对象的中间指针;但是,如果这是您使用point和point2的唯一位置,那么编译器可能会进行优化,使二进制文件始终相同。它们都不相同,因为这两个代码段将编译为相同的MSIL代码表示形式 此外,这是一个微观优化,在你真正意识到它是瓶颈之前,你应该避免它。微观优化,嗯?一位著名剧作家说,我也同意。两者都不是更快

谁能跑得更快?为什么

1:

2:


两者都没有,除了可读性的损失(特别是在JITing之后),它们之间没有真正的区别。

2可能更快,因为在将对象传递给g.DrawLine之前,您没有创建指向该对象的中间指针;但是,如果这是您使用point和point2的唯一位置,那么编译器可能会进行优化,使二进制文件始终相同。

它们都不相同,因为这两个代码段将编译为相同的MSIL代码表示形式


此外,这是一个微观优化,在你真正意识到它是瓶颈之前,你应该避免它。

微观优化,嗯?一位著名剧作家说,我也同意。

两者都不是更快的,最快的一个应该是避免在渲染路径中分配这些点并提前创建它们的那一个。这一切都取决于你在做什么

如果你几乎什么都不做(我怀疑),那么这就是“瓶颈”

如果这是“瓶颈”,那么你仍然不知道什么是主导因素:

  • 两个“new”和相关的构造函数、析构函数和垃圾收集

  • 实际渲染线条

第二种可能是不可避免的,但第一种只是出于风格原因

您可以通过分析或查找来找到答案

或者你可以通过以下方式避免整个问题:

g.DrawLine(25,25,20,95);

建议您使用System.Diagnostics.StopWatch进行基准测试。这个问题对更广泛的观众来说几乎没有价值……我认为这个问题是正确的,不明白为什么会有反对票!!这个问题是有道理的,但毫无意义。它最好是微观优化,最坏是偏好。我认为这个问题在广义形式上是有效的。我觉得阿鲁尔的回答很有趣。@Eric,谁说这对OP毫无意义?记忆呢?我以为第一个会在内存中创建两个点(对象),但第二个不会在内存中创建?这是对的吗???@mavric-是以同样的方式创建的——在堆栈上(至少我认为Point是一个结构)。即使使用引用类型,唯一的区别是在#1中,在调试模式下,在退出该方法之前不会收集点对象。在释放模式下,对象将具有相同的生存期。
Graphics g = CreateGraphics();
g.DrawLine(new Point(25,25),new Point(20,95));
g.DrawLine(25,25,20,95);