Otázky ohledně výkonu   zodpovězená otázka

VB.NET, LINQ, Optimalizace, WinForms

Mám pár otázek ohledně výkonu v .NET, potažmo aplikacích psaných v OOP jazycích.

1) Nedochází k poklesu výkonu např. když inicializuji instanci DataTable a z ní využiji jen pár metod/vlastností? Jde mi o to, že např. tato třída obsahuje obrovské množství dalších metod, které já nemusím v dané aplikaci vůbec využít. Zpracovává překladač vůbec nevyužité metody? Pokud ano, nevyplatí se někdy si napsat nějakou takovou třídu sám, jen s pár základními metodami?

2) Už v základním vytvoření WinForms aplikace (v C#) je importován namespace System.Linq. Když nebudu jazyk Linq využívat, zlepším, byť jen nepatrně, výkon když tento namespace nebudu importovat?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

1) Pokud ty metody nevoláte, tak se ani nemohou podílet na snížení výkonu. Překladač je nepřekládá, protože už jsou přeloženy v binárkách .NET Frameworku. Pokoušet se napsat si sám podobnou třídu je nesmysl.

2) Ne.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ptal jsem se proto, že jsem někde v diskusi četl příspěvek,zřejmě od zastánce procedurálního prog., kde psal, že dneska všichni horlivě využívají a dědí obrovské třídy a vznikají pak aplikace, které jsou pomalé a přesto skoro nic neumí...

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

To je naprostá pitomost, také jsem to četl (na diskusi na Zdrojáku). Ten člověk je asi nějaký teoretik a ještě k tomu se 30 let zastaralými informacemi a názory.

OOP se dnes používá (až na specializované low level drivery nebo programy pro jednočipy) všude a na čemkoliv větším je to jediný způsob, jak zvýšit přehlednost kódu. Pokud budete mít procedurální program o 1000 funkcích, tak se v něm už málokdo vyzná a zvláště pak nemožnost ošetření přístupu metod ke globálním proměnným (každá funkce může manipulovat se vším) to znamená netestovatelný bastl, ve kterém se vyzná jen autor sám bez ohledu na to, jaká je dokumentace.

Pokud se logika aplikace přehledně rozdělí do tříd s jasně definovanými odpovědnostmi, které mohou mít svůj vlastní stav, nepoužívají se globální proměnné (nebo jen minimálně), výsledný kód je mnohem snáze spravovatelný, udržovatelný a testovatelný, což znamená nesrovnatelně nižší náklady na následnou údržbu.

Navíc 8GB RAMky do notebooku stojí asi 1000 Kč. Zaobírat se tím, jestli aplikace sežere o 100MB knihoven víc nebo méně má smysl jen ve speciálních případech, kterých jsou jednotky z tisíců. Stejně tak procesory jsou dnes tak rychlé, že máte problém je na něco zaměstnat, pokud nepíšete nějaký složitý algoritmus nebo hru. Výkonnostní problémy se občas musí řešit, ale nepřehlednost a neudržovatelnost kódu bych za pár ms zrychlení a úsporu pár MB paměti určitě nevyměnil. Je potřeba vždy zvolit kompromis mezi přehledností, snadností vývoje (potažmo náklady) a rychlostí - někdy má smysl optimalizovat, ale je spousta mikrooptimalizací, kde je např. úplně jedno, jestli použijete DataTable nebo vlastní třídu - rozdíl je nepostřehnutelný a máte s tím spoustu práce navíc.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback