Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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# 尽可能快的绘图、画笔分配和if语句_C#_Performance_Graphics_Pen - Fatal编程技术网

C# 尽可能快的绘图、画笔分配和if语句

C# 尽可能快的绘图、画笔分配和if语句,c#,performance,graphics,pen,C#,Performance,Graphics,Pen,哪一个最有效,哪一个(主观上)最可读?(另一个开发人员编写了第二个选项,我想确定我有一个很好的理由更改它以匹配下面的第一个选项) 或 我知道这会产生微小的差异,但我有一个绘图算法,它需要尽可能快!所以每一点都有帮助。不,在这一点上,使用另一种语言来处理图形不是一个选项 谢谢你的帮助 这里的“性能”没有问题:如果怀疑有性能问题,那么基准测试、基准测试、基准测试(在实际使用场景中)并查看 无论如何,我的偏好是: var pen = highlight ? new Pen(Color.Red, 3

哪一个最有效,哪一个(主观上)最可读?(另一个开发人员编写了第二个选项,我想确定我有一个很好的理由更改它以匹配下面的第一个选项)

我知道这会产生微小的差异,但我有一个绘图算法,它需要尽可能快!所以每一点都有帮助。不,在这一点上,使用另一种语言来处理图形不是一个选项

谢谢你的帮助

这里的“性能”没有问题:如果怀疑有性能问题,那么基准测试、基准测试、基准测试(在实际使用场景中)并查看

无论如何,我的偏好是:

var pen = highlight
  ? new Pen(Color.Red, 3.0f)
  : Pens.Red;
但在以上两种情况中,我更喜欢不带默认值的,但不是为了“性能”:我这样做是因为这样可以依赖C#编译器来确保至少执行一个值设置路径(或者它会抛出关于使用未赋值局部变量的编译错误)

(是的,虽然这同样适用于分配了初始值的情况,但在更复杂的情况下,需要确保其中一条执行路径实际执行时,它会失效。因此,在实际情况下,我选择一致性。)

快乐编码

这里的“性能”没有问题:如果怀疑有性能问题,那么基准测试、基准测试、基准测试(在实际使用场景中)并查看

var pen = highlight ? highlightPen : Pens.Red;


static readonly Pen highlightPen = new Pen(Color.Red, 3.0f);
无论如何,我的偏好是:

var pen = highlight
  ? new Pen(Color.Red, 3.0f)
  : Pens.Red;
但在以上两种情况中,我更喜欢不带默认值的,但不是为了“性能”:我这样做是因为这样可以依赖C#编译器来确保至少执行一个值设置路径(或者它会抛出关于使用未赋值局部变量的编译错误)

(是的,虽然这同样适用于分配了初始值的情况,但在更复杂的情况下,需要确保其中一条执行路径实际执行时,它会失效。因此,在实际情况下,我选择一致性。)


快乐编码

我想,
Pen=(突出显示)?新钢笔(颜色:红色,3.0f):钢笔。红色最具可读性。如果你非常关心性能,你应该分析你的代码。@John它的字面意思是“在你的代码上运行一个分析程序”。探查器是做什么的?它提供了一个“概要”(见图),其中代码的哪些部分花费了最多的时间(使用最多的内存/打开最多的句柄/等等),这些信息可以用来决定如何改进代码中的缺陷。在这种情况下,我真的怀疑任何类型的if语句的诡计是否会有很大的改变,如果有的话。选项1实际上只比IL短2行。最后,他们都做了同样的事情。我想
Pen-Pen=(突出显示)?新钢笔(颜色:红色,3.0f):钢笔。红色最具可读性。如果你非常关心性能,你应该分析你的代码。@John它的字面意思是“在你的代码上运行一个分析程序”。探查器是做什么的?它提供了一个“概要”(见图),其中代码的哪些部分花费了最多的时间(使用最多的内存/打开最多的句柄/等等),这些信息可以用来决定如何改进代码中的缺陷。在这种情况下,我真的怀疑任何类型的if语句的诡计是否会有很大的改变,如果有的话。选项1实际上只比IL短2行。最后,他们都做了同样的事情。在进行基准测试时,我想比较一下你的答案和我的其他两个选项,我该怎么做?@John First,从微观基准(关键字)开始;这将表明是否需要进一步探索。通常情况下,一次性基准测试使用秒表;确保预热JIT并运行大量次。如果微基准显示“没有差异”,那么您就完成了。否则,扩展微基准以包括实际使用上下文。。此外,在类似这样的简单情况下,查看编译器生成的MSIL可以揭示指令差异(我希望有人发布这样的帖子)。。在任何情况下,性能都不是选择上面一个的问题/理由。(请考虑,即使微基准测试显示运行速度快了50%,但测试的代码运行时间占整个代码执行时间的0.00001%,50%也可以[几乎总是]被忽略。我喜欢Equalec进行完整的程序执行时间评测,但它不适用于micro。)在基准测试中,我想比较一下你的答案和我的两个其他选项,我该怎么做?@John First,从micro基准测试(关键字)开始;这将表明是否需要进一步探索。通常情况下,一次性基准测试使用秒表;确保预热JIT并运行大量次。如果微基准显示“没有差异”,那么您就完成了。否则,扩展微基准以包括实际使用上下文。。此外,在类似这样的简单情况下,查看编译器生成的MSIL可以揭示指令差异(我希望有人发布这样的帖子)。。在任何情况下,性能都不是选择上面一个的问题/理由。(请考虑,即使微基准测试显示运行速度快了50%,但测试的代码运行时间占整个代码执行时间的0.00001%,50%也可以[几乎总是]被忽略。我喜欢Equalec进行完整的程序执行时间分析,但它不适合micro。)+1,创建一次pen可能比if语句节省更多shenanigans@Blorgbeard我怀疑“节省更多的[时间]”。创建对象是一个经过充分优化的案例[特别是在短暂的情况下]。。另一方面,在本例中,它确实为高亮颜色指定了一个语义名称(对于
regularPen
variable/“constant”也可以这样认为),这就是为什么我给出了+1.+1,创建一次笔将
var pen = highlight ? highlightPen : Pens.Red;


static readonly Pen highlightPen = new Pen(Color.Red, 3.0f);