2010-03-24 6 views
3

크로스 플랫폼을 목표로하는 Mono (C#) 프로젝트에서 UI 용 GTK를 사용하고 있습니다. 그러나 내가 알아챈 한 가지는 Archlinux의 넷북에서 성능이 정말 빠르기 때문에 마우스를 움직이거나 위젯을 다시 그리는 것과 같은 이벤트가 정말 빠릅니다.Windows에서 GTK + (GTKSharp) 성능이 좋지 않음

듀얼 코어 CPU의 Windows (7)과 비교하면 성능이 매우 약합니다. 어느 것이 나를 괴롭힌다.

내가 OSes 간의 성능 차이를 보장하는 데 뭔가 잘못하고 있습니까?

Windows에서 GTK를 최적화하려면 어떻게해야합니까? 호버 이벤트가 시작되는 데는 0.5 초 정도 걸리며 리눅스는 약한 (net) 넷북이 거의 즉각적입니다.

내 코드는 GUI 계층을 위해 여기에 있습니다 : http://code.google.com/p/subsynct/source/browse/branches/dev/subsync#subsync/GUI

감사합니다!

답변

2

성능 문제가 카이로에 있다고 생각합니다. Linux에서 gtkparasite를 사용하여 앱의 부분을 다시 그려서 최적화하는 방법을 알 수 있습니다.

Windows에서 MS의 무료 CLR 프로파일 러를 사용하여 앱의 핫스팟을 찾을 수도 있습니다.

5

실제 문제는 그래픽 라이브러리 GTK가 사용하는 것입니다. 카이로. 여러분은 GTK가 Windows와 비교하여 Linux 및 다른 운영 체제에서 훨씬 뛰어나다 고 말하고 있습니다. 사실이 문제는 사실 카이로 도서관 전체와 관련이 없습니다. 카이로의 Win32 백엔드에 있습니다. Cairo Docs의 Backend-Info에 따르면 카이로는 xlib을 사용하고 어떤 경우에는 cairo-gl (사용자 정의 된 OpenGL으로 생각하십시오)을 사용하여 Linux 및 다른 플랫폼에서 작동합니다. Windows에서는 Win32 GDI을 사용하는 반면, 결국은 약간 느리고 구식입니다 (완전히 렌더링 된 소프트웨어는 말할 필요도 없음).

그래도 Windows에서 Gtk의 성능 저하를 완전히 설명하지는 않습니다. 또 다른 문제점은 네이티브 위젯을 사용하는 대신 Gtk가 모든 플랫폼에서 거의 동일하게 보이는 draw it's own widgets을 선호한다는 것입니다. 그러나 Windows에서는 LibWimp을 사용하는 기본 위젯을 emulate으로 시도하여 기본 모양과 느낌을 더욱 향상시킵니다. 이 추가 Windows 전용 단계는 성능 오버 헤드를 고려할 수도 있습니다. 이것을 직접 확인하려면 김프 디렉토리에서 libwimp.dll을 삭제 (또는 이름을 바꾸기) 해보십시오. 김프는 그 이후로 더 빨리 실행됩니다.

Windows에서 Gtk의 성능에 영향을 줄 수있는 다른 작은 요인이 있습니다. GTK에는 1-2와 같은 다른 툴킷과 비교하여 12-15 개의 추가 dll과 같은 추가 런타임이 있습니다. 동적으로 전체 Gtk 런타임을 링크하면 시작 시간이 크게 늘어날 수 있습니다. 또한 Gtk가 Glib, Pango 및 물론 Cairo과 같은 많은 다른 라이브러리를 사용한다는 사실도 있습니다. 이 라이브러리들에 glue code을 쓰면 많은 오버 헤드가 추가되고 때로는 심지어 과 같은 라이브러리가 추가됩니다.

Gtk를 최적화하려면 카이로의 백엔드를 변경하거나 (어려우며 미혼이고 접착제 코드가 더 필요합니다) libWimp 사용을 중지하십시오 (Gtk가 덜 기본으로 보일 것입니다). 하지만 전반적으로 나는 GTK가 이 아니고,이 느리다 고 생각합니다. 개인적으로 최적화를 사용할 필요가 없습니다. 과거에도 WinApi를 사용했지만.

관련 문제