代码之家  ›  专栏  ›  技术社区  ›  Nikwin

什么时候用C重写Python模块才有意义?

  •  4
  • Nikwin  · 技术社区  · 16 年前

    在我正在编写的一个游戏中,我使用一个2D向量类来处理对象的速度。这被称为每帧多次,因为屏幕上有很多对象,所以我可以提高它的速度。

    它非常简单,主要由相关数学函数的包装组成。用C语言重写是非常简单的,但我不确定这样做是否会产生显著的影响,因为它真正做的只是调用底层的数学函数,加法、乘法或除法。

    所以,我的问题是,在什么情况下用C重写是有意义的?在哪里可以看到显著的速度提升,在不重写大量程序的情况下,在哪里可以看到合理的速度提升?

    5 回复  |  直到 16 年前
        1
  •  14
  •   Eli Bendersky    16 年前

    numpy a先试试。如果你明智地利用numpy的向量操作函数,你很可能会在离C不远的地方获得速度。

    除此之外,你的问题很有启发性。如果您的代码太慢:

    1. 使用正确的基于C的优化库(以numpy为例)
    2. psyco
    3. 尝试用 cython
        2
  •  9
  •   Martin Beckett    16 年前

    先测量再优化

        3
  •  1
  •   Luper Rouch François Lagunas    16 年前

    你永远不应该优化任何东西,不管是用C语言还是其他语言,在优化之前都要对你的代码进行计时 优化后:

    • 优化占总执行时间1%的内容所带来的性能永远不会超过1%

    通常的做法是:

    1. 识别热点
    2. 这个热点的时间
    3. 优化它

    要在Linux下评测python代码,可以使用 pyprof2calltree 它与 kcachegrind

        4
  •  0
  •   Steven Sproat    16 年前

    我在Linux上使用的一个很好的分析器是 pycallgraph -然而,随着程序变大,它开始创建更大的图像,更难跟踪。不过,我很确定您可以排除模块。

        5
  •  0
  •   Community Mohan Dere    9 年前

    共同的智慧是“轮廓”,“测量”,等等,也许吧。只需进入调试器,并采取10 stackshots