Jsa v podezření, že ADO není tak rychlé jak někdo tvrdí, jal jsem se do toho trochu šťouchat. Vzniklo to tak, že bych rád zrychlil zobrazení dat v gridu a že mne zajímalo, zda existuje grid, který by načetl z DB jen
ty data, která jsou viditelná. Věděl jsem, že něco takového musí existovat, jelikož všechny EMS SQL Managery pro různé DB to umožňují - aspoň částečně (data jsou asi načtena po viditelný záznam, tj. při stránkování při PgDown jsou asi načteny všechny stránky až po aktuální stránku). A věděl jsem že to je napsané v Delphi (stačí vyhledat řetezec Delphi v EXE).
Update: Zdeněk Vašků mi poradil nastavit u uniquery ve SpecificOption FetchAll (true/false) + přímo v komponentě FetchRows (počet vět v dávce). A to pak funguje i normálního gridu. Viz komentáře.
Nakonec mne napadlo podívat se do exe a zkusit tam vyhledat text "grid" - předpokládal jsem, že komponenta bude mít ve jménu tento řetězec a Delphi při kompilaci ukládá do EXE názvy všech komponent. Problémem je, že exe je šifrované asprotect, což je celkem efektivní ochrana. Takže smůla - tolik času jsem tomu nechtěl věnovat. Už jsem se na to chtěl vykašlat, když mne napadlo, že by stálo možná za to v tomto případě udělat dump běžícího procesu. A tady jednou MS zabodoval. Windows 7 mají ve správci procesů možnost zapsat dump do souboru (to mi řekl google), takže stačilo přes pravé tlačítko na procesu vybrat "Vytvořit soubor výpisu" (to je teda překlad) a na disku se objevil dump (jedná se o výpis procesu - není to spustitelný soubor, ale dá se v tom vyhledávat. To píši také protože aby si laskavý čtenář uvědomil, že když něco zabalí např. UPX tak to neznamená, že pokud je tam heslo jako čitelný text, že si nějak pomůže.
No výsledkem je TcxGrid což je grid od devexpress, který je ale na mne drahý. Takže jsem si řekl, zda nezkusím aspoň zrychlit data.
Už z dřívějška jsem věděl, že existují komponenty SDAC (resp. UniDAC) od devart.com a už pár lidí mi říkalo, že to není vůbec špatné. Mají i další výhodu - UniDAC umožňují přístup k libovolné databázi včetně FireBirdu nebo ODBC (kdyby to MS opravdu s OLEDB zabalil), což je pro mne plus. Stáhnul jsem si trial verzi a že zkusím pár testů. Prima je, že součástí je i celkem inteligentní grid (ale nedá se koupit samostatně, zato ho dostanete i se zdrojovým kódem).
Takže jsem na formulář vrazil TADOConnection, TADODataset, TUniQuery a TUniConnection plus nějaké DataSource a TDBGrid a uvedený TCRGrid, v DB vytvořil tabulku a nageneroval jsem tam 460tisíc záznamů a jal se testovat.
Nejprve jsem položil dotaz v MS Management Studio Express 2005 - výsledek 10s. Stejný dotaz v uvedeném EMS SQL Manageru - 5,8s. Což mne začalo zajímat.
Přes ADO v Delphi XE2 - 5,7s, přes UniDAC nakonec za 2,7s. Což opravdu není špatné. Všechny doby jsou do konce zobrazení gridu s daty.
Volba gridu na to nemá vliv (tedy pokud u TCrGridu nezapnete sumarizaci).
Další možnou volbou je AnyDAC, které jsem netestoval, ale podle názorech na fórech to může být i někdy o kapánek rychlejší (a podporované DB jsou taky zajímavé). Každopádně tam mají i porovnání rychlostí i s BDE a DBExpress (obojí rychlejší než ADO).
Závěr: je dobré vědět, že ADO opravdu není tak rychlé, ale je zadarmo. UniDAC a AnyDAC nabízejí zajímavou placenou alternativu.