Skriptování v .NETu 9 (Praktické testy, System.AddIn)

Ačkoliv by se předchozí díl mohl zdát (podle názvu) závěrečný, opak je pravdou. :) Kategorie, ve kterých jsem skriptovací jazyky testoval, měly totiž jeden společný parametr – byly závislé na komunikaci mezi skriptem a hlavním programem. Další parametr, který nás zajímá, je rychlost vyhodnocování samotného skriptu.

L-Systém fraktály

Vytvořil jsem jednoduchý testovací program, který vykresluje L-Systém fraktály. K ovládání vykreslovacího kurzoru (želvičky) se nepoužívá gramatika, ale právě různé skriptovací jazyky. Pro více informací o tomto druhu fraktálů doporučuji článek L-Systémy: přírodní objekty i umělé artefakty, který vyšel na serveru Root.cz. Aby měly skriptovací jazyky alespoň nějakou práci, budou vykreslovat kapradinu, kterou můžete vidět na obrázku:

kapradina

Nemá cenu popisovat jednotlivé metody želvičky. Pro podrobnosti si, prosím, stáhněte celý projekt v závěru článku. Snad jen pro úplnost pseudokód, který vykonávaly všechny testovací skriptovací jazyky:

function Fern(size)
    if size <5 then
       return        
    end
    turtle.Forward(size / 20)
    turtle.Left(80)
    Fern(size * 0.3)
    turtle.Right(82)
    turtle.Forward(size / 20)
    turtle.Right(80)
    Fern(size * 0.3)
    turtle.Left(78)
    Fern(size * 0.9)
    turtle.Left(2)
    turtle.Backward(size / 20)
    turtle.Left(2)
    turtle.Backward(size / 20)            
end
Fern(300)

 

System.AddIn Framework

Už nadpis sliboval průzkum technologie System.AddIn (.NET 3.5) – jedná se o framework, pomocí kterého můžeme poměrně jednoduše vyvinout aplikaci rozšiřitelnou pomocí zásuvných modulů. Tento framework má výhodu hlavně v tom, že umožňuje řešit zpětnou kompatibilitu jednotlivých zásuvných addinů, možnost jejich uvolnění z paměti a ochranu hlavního programu proti chybě v addinu (addiny běží v oddělené AppDomain).

O System.AddIn Frameworku toho bylo napsáno poměrně hodně a určitě stojí za prozkoumání. Mohu doporučit:

Co je důležité pro naše testovaní je fakt, že práce s Addinem (pluginem, zásuvným modulem, jak chcete...) určitě bude trvat nějaký čas navíc, protože hlavní program musí komunikovat s jinou AppDomain.  O rychlosti komunikace rozhoduje, jestli se předávaný objekt mezi addinem a hlavním programem předává hodnotou serializovaný (atributem [Serializable]) nebo odkazem (zděděný ze třídy MarshalByRefObject).

Testování

Test ukazuje, jak rychle lze volat metody proměnné (instance určité třídy, která byla vytvořená v hlavním programu) ze skriptu. Testování nezahrnuje režii, která je potřeba k vytvoření testovacího engine. Proto testujeme pouze následující kroky:

  • Parsování a kompilace (vyhodnocení) skriptu.
  • Předání vytvořené instance želvičky.
  • Rekurzivní vykreslení kapradiny ve skriptovacím jazyku.

V testování System.AddIn frameworku se testuje pouze to, jestli je objekt želvičky předáván mezi AppDomain:

Dobu potřebnou ke komunikaci mezi AppDomain jsem měřil tak, že jsem vypočítal rozdíl mezi dobou výpočtu v hlavním programu a napevno naprogramovaným kódem v addinu (bez použití skriptovacího jazyka).

Pár poznámek: Skriptovací knihovna DotScript, kterou jsem popisoval v prvním dílu seriálu, se neosvědčila – metoda, která měla přidat referenci na assembly s želvičkou, nefungovala. Omluvou budiž to, že je knihovna DotScript v beta verzi (bohužel jsem neměl čas problém blíže zkoumat). DotScript jsem proto nahradil parsováním C# pomocí CodeDomProvideru. 

Také je třeba poznamenat, že v PowerShellu se mi nepodařilo (ačkoliv jsem zkoušel na hodně místech použít přetypování na celá čísla) docílit vykreslení kapradiny stejně. Kapradina se vykreslí bohatší, což PowerShell trochu znevýhodňuje – ale nemělo by moc zásadně.

Testování probíhalo na počítači s procesorem Intel Core Duo 2 (P8400) @ 2.26 GHz, 4 GB RAM, operační systém Windows Vista Ultimate.

Výsledky

Jazyk MarshalByRefObject [Serializable]
Lokální výpočet 70 ms 71 ms
Výpočet v addinu 937 ms 3090 ms
Boo 1026 ms 3258 ms
C# 970 ms 3125 ms
IronPython 3590 ms 5173 ms
IronRuby 2856 ms 5155 ms
JScript .NET 1475 ms 5097 ms
Lua 2506 ms 5979 ms
PowerShell 408669 ms 411687 ms
 
Komunikace 866 ms 3018 ms

 

A nyní trochu grafů... :)

speed1a

speed1b

Protože se z grafů s logaritmickým měřítkem těžko odhadují poměry komunikací mezi AppDomain a vlastním prováděním skriptů, udělal jsem ještě 2 grafy, kde je poměr hezky vidět. Na těch už není PowerShell, který by je svým dlouhým časem zkresloval.

speed2a 

 speed2b

Závěr

V tomto praktickém testu se opět ukázalo, že skriptovací jazyky můžeme rozdělit do 3 skupin, které jsou zhruba stejně rychlé:

  • Ty, které se překládají do CIL (C#,Boo,JScript).
  • Ty, které používají Dynamic Languga Runtime (IronPython, IronRuby).
  • Ostatní – poměrně rychlá Lua, a velmi pomalý PowerShell.

Také jsem chtěl ukázat, jaký vliv může mít opakované používaní objektu z jiné AppDomain a jaký vliv na to má předávaní odkazem (MarshalByRefObject) a hodnotou ([Serializable]).

Pro vytvoření tohoto ukázkového programu bylo použití jiných AppDomain nezbytné, protože současná verze IronRuby a IronPython používá sice stejné assembly Dynamic Language Runtime, ale jiné verze. Jindy je třeba toto řešení zvážit z důvodu režie, kterou má komunikace mezi AppDomian.

Pro detaily k jednotlivým skriptovacím jazykům, prosím, zavítejte do předcházejících dílů seriálu.

Ke stažení

Myslím, že na závěr by se slušelo dát ke stažení celý projekt pro vykreslování L-Systém kapradiny pomocí skriptů.

Testovací program byl vytvořen narychlo a pouze pro účely testování, tak prosím o kolegiální toleranci. :)

Zveřejněno 13 října 09 11:28 by topas
Vedeno pod: ,

Upozornění na nové komentáře

Pokud chčeš dostávat upozornění emailem na změny u toho příspěvku,tak se zaregistruj zde.zde

Odebírat komentáře k tomuto příspěvku pomocí RSS

Komentář

# .NET i jiné ... said on října 19, 2009 20:46:

Nahromadilo se mi tu plno otevřených záložek v přenosném FF a protože se k nim vrátím “někdy”, tak tady

# Jakub Müller said on října 20, 2009 16:35:

Díky za články, pěkné porovnání.

# Oliver said on března 5, 2013 20:27:

Such a nice post. I like to read.

http://onlinerx4all.com/kamagra-oral-jelly-100mg-brand.html

http://onlinerx4all.com/kamagra_brand.html

# KelTeerly said on června 28, 2017 19:30:

Isotretinoin Delivered On Saturday Hawaii  [url=http://cheapviausa.com]viagra[/url] Pharmaceuticals No Prescription

# KelTeerly said on července 1, 2017 15:16:

Cheap Viagra Without A Script  [url=http://cialonline.com]cialis[/url] Where To Buy Cialis 20mg In Uk

# KelTeerly said on července 6, 2017 23:01:

Osu Cialis Commander  [url=http://levinorx.com]viagra[/url] Viagra Brevetto Scadenza

# ChasRegmep said on července 7, 2017 13:28:

Take Flomax At Night  [url=http://onlinecial.com]cheap cialis[/url] Cold Balm

# ChasRegmep said on července 7, 2017 13:28:

Take Flomax At Night  [url=http://onlinecial.com]cheap cialis[/url] Cold Balm

# Kennglalcops said on července 7, 2017 13:31:

Levitra Senza Ricetta  [url=http://femalecial.com]cialis buy online[/url] Kamagra And Hiv

# KelTeerly said on července 10, 2017 14:13:

Amoxicillin For Bronchial Infections  [url=http://levinorx.com]buy viagra online[/url] Levitra And Cialis Online

# ChasRegmep said on července 11, 2017 16:29:

Kamagra Oral Jelly 100mg Offers  [url=http://levinorx.com]viagra[/url] Buy Dapoxetine

# ChasRegmep said on července 11, 2017 16:29:

Kamagra Oral Jelly 100mg Offers  [url=http://levinorx.com]viagra[/url] Buy Dapoxetine

# Kennglalcops said on července 11, 2017 22:52:

Prednisolone Over The Counter  [url=http://lowpricevia.com]generic viagra[/url] Farmacie Online Tamoxifen

# Kennglalcops said on července 11, 2017 22:52:

Prednisolone Over The Counter  [url=http://lowpricevia.com]generic viagra[/url] Farmacie Online Tamoxifen

# KelTeerly said on července 16, 2017 23:34:

100 Mg Viagra Pfizer  [url=http://cialvia.com]cialis[/url] Cialis Generic Overnight Shipping

# ChasRegmep said on července 17, 2017 12:49:

Amantadine Buy Online  [url=http://pricescial.com]buy cialis[/url] Priligy Andorra Precio

# ChasRegmep said on července 17, 2017 12:49:

Amantadine Buy Online  [url=http://pricescial.com]buy cialis[/url] Priligy Andorra Precio

# Kennglalcops said on července 17, 2017 13:18:

Stendra Vs Viagra  [url=http://buytadalaf.com]cialis[/url] Is There Such Thing As Generic Viagra

# ChasRegmep said on července 31, 2017 12:03:

Best Price Viagra Usa  [url=http://lowpricevia.com]viagra[/url] Comprare Viagra In Germania

# KelTeerly said on července 31, 2017 16:32:

Cialis En Farmacias  [url=http://lowpricevia.com]buy viagra[/url] Buy Cialis No Prescription

# RonbuIt said on října 2, 2017 16:02:

Amoxil Gouttes Pediatriques Propecia To Increase Facial Hair Second Day Reaction Side Effects Keflex  [url=http://leviprices.com]levitra on line[/url] Cost For Viagra Without Insurance 283  

# RonbuIt said on října 13, 2017 17:24:

Taking Amoxicillin During Ovulation  [url=http://leviprices.com]levitra wholesale no prescription[/url] Kamagra Jelly Amazon Zithromax Itchy Hands  

# RonbuIt said on října 15, 2017 16:30:

Zithromax Gum Disease  [url=http://ordercheapvia.com]viagra[/url] Europharmacy Ed Medicine Kamagra Fast  

Vytvoření nového komentáře

(povinný) 
(nepovinný)
(povinný) 
Opiš čísla, která vidíš na obrázku:
Vyvojar.cz na prodej!