2009-06-16 3 views
2

버퍼에 bmp 이미지 만 줄 수있는 chartdrawer 라이브러리를 임베드하려고합니다.pygtk 하나의 pixbuf에만 이미지 플로우로드하기

이 이미지를로드 중이며 새로 생성 된 pixbuf에서 delete를 명시 적으로 호출하고 가비지 수집기를 호출해야합니다.

은 연신 방법은 가비지 수집기 호출 각각은 50ms

가 정말 CPU의 소모 불린다.

모든 프로세스에 pixbuf를 하나만 사용할 수있는 방법이 있습니까? 따라서 gc를 호출 할 필요가 없습니까?

아니면 모든 것을 잘못하고 있습니까? 당신은 가비지 컬렉터를 호출 할 필요는 없습니다

def draw(self, drawArea): 

     #init bmp loader 
     loader = gtk.gdk.PixbufLoader ('bmp') 

     #get a bmp buffer 
     chart = drawArea.outBMP2() 

     #load this buffer 
     loader.write(chart) 
     loader.close() 

     #get the newly created pixbuf   
     pixbuf = loader.get_pixbuf() 

     #and load it in the gtk.Image 
     self.img.set_from_pixbuf(pixbuf) 

     del pixbuf 
     gc.collect() 
+0

왜 pixbuf를 삭제하고 gc.collect()를 호출해야합니까? 당신이 혼자서 bmp 파일을 업 패닝하지 않는 한 동일한 pixbuff를 사용하는 것은 불가능합니다. –

답변

1

: 어떤 도움

라파엘

코드를 사전에

들으. 파이썬은 자동으로 가비지 수집됩니다. 메서드가 끝나면 pixbuf이 범위를 벗어나고 ("del pixbuf"이 필요하지 않음) 자동으로 가비지 수집됩니다. 따라서 처음에는 메서드의 마지막 두 줄을 삭제하십시오.

너무 많은 CPU를 소비하는 경우 '그리기'방법을 자주 사용하지 않는 것이 좋습니다. 대부분의 응용 프로그램에서 사용자는 50ms가 아닌 200ms마다 업데이트를 처리 할 수 ​​있다고 상상합니다. 50ms마다 CPU 문제가 발생한다는 것을 의미합니다.

+0

정확히 내 문제입니다. 메모리를 명시 적으로 삭제하고 GC를 호출하지 않으면 메모리가 계속 증가합니다. 범위를 벗어나는 것 외에 메모리는 가비지 수집되지 않습니다. 이 트릭을 사용했습니다. http://faq.pygtk.org/index.py?file=faq08.004.htp&req=edit – rapdum