许多方法杀死代码速度?

我正在构建一个比它应该慢得多的应用程序(一个过程需要4秒,它应该只需要0.1秒,这至少是我的目标)。

我有一堆方法将数组从一个传递到另一个。 这使我的代码保持良好和有条理,但我担心它会破坏我的代码的效率。

任何人都可以确认是否是这种情况?

另外,我的所有代码都包含在与我的UI分开的类中。 这会使得运行速度明显慢于我将我的代码包含在Form1.cs文件中吗?

编辑:需要计算大约95000个点,每个点通过7个方法进行额外的计算。

您是否尝试过任何分析或性能工具来缩小减速发生的原因?

它可能会向您展示可用于重构代码和提高性能的方法。

其他用户提出的此问题有几个选项供您选择:

好的.Net Profilers

不。这不是什么会破坏你的代码速度,除非许多方法意味着像一百万或类似的东西。 你可能有更多东西迭代你的数组而不是你需要或意识到,并且数组本身可能比你意识到的更大的内存占用。

也许你应该研究一个设计,而不是将数组传递给7个方法,你迭代数组一次,将成员传递给7个方法,这将最小化你迭代95000个成员的次数。

通常,函数调用是基本的,足以被任何解释器(或编译器)高度优化。 因此,这些不会在运行时产生大量爆炸。 实际上,如果将问题包装到一些花哨的迭代解决方案中,则可以节省处理堆栈,而是必须处理一些迭代变量,这些变量并不难。

我知道,有些程序员想知道为什么他们的递归算法如此缓慢,直到有人告诉他们不要按值传递数组条目。

您应该提供一些示例代码。 通常,您应该遇到其他瓶颈,或者找到另一种算法。

只需要针对一个好的分析工具运行它。 我有一些我希望只花了4秒钟的东西 – 在一个传球中使用超过一亿的记录。

Array是引用类型而不是值类型。 因此,您永远不会传递数组。 您实际上是将指针传递给内存中的数组。 所以传递数组不是你的问题。 您最有可能在使用arrays时遇到问题。 你需要做Jamie Keeling所说的并通过一个分析器运行它,甚至只是调试它,看看你是否陷入了一些大循环。

为什么要将它们全部加载到数组中并依次执行每个方法而不是在加载时迭代它们?

如果您可以获取它们(来自任何输入源)处理它们并输出它们(无论是屏幕,还是存档我们的任何地方),这将不可避免地使用更少的内存并减少启动时间,至少。

如果这个答案适用于你的情况,首先要改变你的方法来处理枚举而不是数组(非破坏性更改,因为数组是枚举),然后改变你的输入方法以产生加载的返回项而不是加载整个数组。

很抱歉发布旧链接(.NET 1.1)但它包含在VS2010文章中,所以: 在这里您可以阅读有关方法成本的信息。 ( 初始链接 )

然后,如果从VS启动代码(无论如何,即使在发布模式下),VS调试器也会连接到您的代码并降低速度。

我知道,对于这个建议,我会被贬低,但……最大的性能将通过arrays的不安全操作来实现(是的,它是UNSAFE,但是当有性能交易时,所以……)

最后一步 – 重构你的代码,使用最少的方法来处理你的数组。 它将改善性能。