Cython cdef没有速度增加

时间:2012-07-31 05:20:38

标签: python c cython

我终于得到了cython工作,感谢stackoverflow上的一些人,但现在有一个问题。从我不使用cdef到使用cdef时,确实没有速度增加。当我使用cython编译python代码时,不要误解我有一个非常明显的速度增加,但是当我使用cdef时不是这样。

这是代码中减慢程序其余部分的区域:

def tupdate(self,surf):     

    cdef int x
    cdef int y

    for x in xrange(self.w):
        for y in xrange(self.h):
            if self.map[(x,y)].y <= 600 and self.map[(x,y)].y >= -50: self.map[(x,y)].FLAG = 1
            else: self.map[(x,y)].FLAG = 0
            self.map[(x,y)].y += self.speed
            if self.map[(x,y)].FLAG:
                self.map[(x,y)].rect = ((self.map[(x,y)].x,self.map[(x,y)].y),(50,25))
                self.map[(x,y)].update()
                self.map[(x,y)].render(surf)

此代码应该每秒被调用60次,但由于代码的速度和我的旧硬件每秒只调用30次左右,我认为使用cdef这么强烈使用像x和y这样的变量会有所帮助。但是fde在cdef之前和之后都是一样的。

我在Windows 7 64bit上使用32位python 2.7

1 个答案:

答案 0 :(得分:5)

您在代码中使用相同的索引对self.map 11次进行索引。将其标记为一次,将引用复制到本地名称,然后使用该名称。