许多方法杀死代码速度?

时间:2010-08-06 17:52:29

标签: c# optimization

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

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

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

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

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

7 个答案:

答案 0 :(得分:11)

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

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

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

Good .Net Profilers

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

只需要针对一个好的分析工具运行它。我有一些我希望只用了4秒钟的东西 - 在一张通行证中有超过一亿条记录。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:-1)

很抱歉发布旧链接(.NET 1.1)但它包含在VS2010文章中,因此: Here you can read about method costs.Initial link

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

我知道,对于这个建议我会被贬低,但是......使用数组的不安全操作可以达到最大性能(是的,它是UNSAFE,但是当有性能交易时,所以...)

最后一个 - 重构你的代码,使用最少的方法来处理你的数组。它会提高性能。