在 VB.Net 中,两个代码示例实现了相同的功能,但哪个更好?

问题描述 投票:0回答:1

我检查了所有类似的问题,但找不到答案。 请有人建议哪个更好,为什么?

我有一个图片框,在“画图”中,我使用以下代码绘制水平线。 我在 Paint Event 中还有很多其他事情要做,想知道哪个更快,哪个使用最少的资源。

        'This draws the lines (Example1)
        Dim w As Integer = 30
        For i As Integer = 1 To 6
            e.Graphics.DrawLine(Pens.Black, Start_OffSet, w, PictureBox1.Width, w)
            w += 30
        Next

        'This draws the lines (Example2)
        e.Graphics.DrawLine(Pens.Black, 0, 30, PictureBox1.Width, 30)
        e.Graphics.DrawLine(Pens.Black, 0, 60, Picturebox1.Width, 60)
        e.Graphics.DrawLine(Pens.Black, 0, 90, PictureBox1.Width, 90)
        e.Graphics.DrawLine(Pens.Black, 0, 120, PictureBox1.Width, 120)
        e.Graphics.DrawLine(Pens.Black, 0, 150, PictureBox1.Width, 150)
        e.Graphics.DrawLine(Pens.Black, 0, 180, PictureBox1.Width, 180) 

我倾向于认为这是第二个例子,因为不需要计算,但不知道如何确认这一点。

提前非常感谢。

vb.net picturebox
1个回答
0
投票

嗯,计算科学中有一个概念。该术语通常被称为“主管”模式。

实际上,99% 的计算机时间都用于绘制代码的例程。因此,您必须“调用”这些例程的代码并不重要,也不会影响绘图的速度。

绘图命令并不关心您是否使用了一些非常慢的编程语言 - 即使是非编译语言。因为归根结底,两者都调用相同的基于“api”的绘图命令,而这就是这里的大部分计算机成本。

这就是为什么在 VB5/VB6 时代,您可以“本机”编译您的应用程序,或者以未编译的方式运行它(它将运行解释编译器生成的 p 代码)。

但是,要绘制文本框、绘制圆形,甚至在 Windows 屏幕上放置文本吗?已编译的代码和未编译的代码都调用相同的 Windows API 代码。实际上,99% 的计算机代码时间都花在“主管”模式下,或者调用操作系统代码在屏幕上绘图,而那不是您的代码!

那么,10 行代码?即使该代码的运行速度比编译后的 6 行代码慢 1000 倍?

嗯,执行每行代码的速度并不重要,因为两者都将等待系统绘图命令完成。

您的计算机现在可以轻松运行一个循环到 10 亿次 - 远低于一秒。

所以,一些循环?时间并不重要。由于 99% 的时间都花在绘图例程上,因此调用此类例程的代码并不重要。

假设循环代码慢了 1000 倍?

那么,总的绘制时间,99%了吗?它正在等待绘图例程完成 - 这两个示例都在调用。

所以说整个过程花了5秒。

然后你就有了这个循环:

  5.0000000001

然后你就得到了预编译例程:

  5.0000000000000000000000001

换句话说,在这两种情况下,您的代码成本都是 6 次绘图调用,调用这些绘图例程的速度甚至可能慢 10,000 倍,但从用户角度来看,这 2 个示例的总体速度是相同的查看。

那么,真正的答案是?

作为开发人员,哪个更容易维护和更改?显然第一个例子是,所以你的代码选择不是 CPU 限制的选择,而是开发人员成本和时间的选择 - 与我们现在 CPU 能力的大幅增加相比,这一点没有改变。

因此,从性能的角度来看,这里没有任何优势,这是因为这里有数十亿个计算机周期可用。

因此,运行循环所花费的时间不是问题,但是等待绘图命令的时间是您的高计算机成本 - 并且调用此类例程的代码的速度不会改变绘图命令运行的速度 - 它们每种情况都以相同的速度运行。

所以,选择你最喜欢的一个,因为计算机成本在这里不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.