Uwaga! Informacje na tej stronie mają ponad 6 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.
Thu 14 Sep2006
Uczyłem się wczoraj GDI+ i przy okazji zrobiłem drobny eksperyment. Polegał on na rysowaniu po powierzchni okienka różnych rzeczy w użyciem odpowiednio C++, Windows API i GDI oraz C#, .NET i GDI+. Wyniki są zatrważające.
Rysowanie linii jednym piórem
Kod natywny: 12618 rysowań/sekundę
Kod zarządzany: 694 rysowań/sekundę
Stosunek: 18 razy
Rysowanie prostokątów jednym piórem
Kod natywny: 6614 rysowań/sekundę
Kod zarządzany: 501 rysowań/sekundę
Stosunek: 13 razy
Rysowanie linii za każdym razem nowym piórem
Kod natywny: 10456 rysowań/sekundę
Kod zarządzany: 698 rysowań/sekundę
Stosunek: 15 razy
Rysowanie prostokątów za każdym razem nowym pędzlem
Kod natywny: 4571 rysowań/sekundę
Kod zarządzany: 492 rysowań/sekundę
Stosunek: 9 razy
Blitowanie bitmapy 16x16
Kod natywny: 219190 rysowań/sekundę
Kod zarządzany: 31762 rysowań/sekundę
Stosunek: 7 razy
Blitowanie bitmapy 256x256
Kod natywny: 8612 rysowań/sekundę
Kod zarządzany: 1122 rysowań/sekundę
Stosunek: 8 razy
Blitowanie bitmapy 16x16 z rozciągnięciem
Kod natywny: 780 rysowań/sekundę
Kod zarządzany: 376 rysowań/sekundę
Stosunek: 2 razy
Blitowanie bitmapy 256x256 z rozciągnięciem
Kod natywny: 866 rysowań/sekundę
Kod zarządzany: 525 rysowań/sekundę
Stosunek: 2 razy
Ja rozumiem, że GDI nie musi być demonem szybkości, bo gier się w nim nie pisze (chyba, że pasjansa). Jednak różnica rzędu kilku czy kilkunastu razy to nie kilka czy kilkanaście procent, ale kilaset albo ponad tysiąc procent! To jest tak, jakby framerate spadł z ponad 1000 do 100 albo z ponad 100 do 10 FPS. .NET jednak nie rulez...