Diskuze: Líné konstruktory

C# .NET .NET (C# a Visual Basic) Líné konstruktory American English version English version

Avatar
gcx11
Redaktor
Avatar
gcx11:

Ahoj,
četl jsem, že by měly být konstruktory v C# převážně líné. Má to nějaké reálné výhody a jak často by se to mělo používat? Přijde mi, že to vyžaduje kód navíc, pokud nepoužiji cukr ze C# 4 a může to urychlit start aplikace, ale víc mě nenapadá.

 
Odpovědět 21. července 15:33
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

co je líný constructor? Myslíš Side effect? :-)

 
Nahoru Odpovědět 21. července 15:35
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:

Že se atributy objektu dopočítají, až když je potřebuješ.

 
Nahoru Odpovědět 21. července 15:43
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

aha.. lazy init / lazy loading (treba Lazy<>):-) To se používá poměrně často.. obzvláště pokud tvorba objektu trvá třeba dlouho, nebo je náročné na zdroje.. obzvlaste, kdyz to třeba většinou nepotřebuješ...

typickým příkladem je DBContext u ASP. Často nepotřebuješ přístup do DB, ale je součástí (ať už přímo, nebo nepřímo přes repozitáře) controlleru.. takže se ti vytvoří pokaždé.. přesto, že databázi potřebuješ třeba jen u 1 akce z těch 30ti co u controlleru máš.

Editováno 21. července 16:00
 
Nahoru Odpovědět 21. července 16:00
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:

To chápu, ale přemýšlím, jestli je rozumné to tak dělat pro každou třídu.
BTW můžeš někdy zkusit tlačítko odpovědět, uživatelům se to pak i zobrazí, že jsi jim odpověděl ;)

 
Nahoru Odpovědět 21. července 16:41
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na gcx11
Marian Benčat:

většinou to dělám, jen bych čekal, že se to uživateli zobrazí při jakékoliv reakci, ostatně,.. jako to dělá facebook.. Tedy jsem si to myslel.. proto mi to odpovědět přišlo k ničemu, protože to tu stejně na hovno hajlajtuje ;-)

Každopádně.. u většiny použití Lazy<> porušuje Law of Demeter a když to chceš nějak fixnout, tak to vede většinou k větší práci navíc..

Obecně, takovéto optimalizace nejsou úplně "first run".. když implementuješ, takovéto věci prostě neřešíš.. celkově neimplementuješ prostě tak, aby bylo vše co nejefektivnější.. spíše jedeš, aby to bylo "normálně výkonné" a pak detekuješ určité hotspoty a bottlenecky a tam opravuješ.

Je tedy zcela jistě hloupost přesypat kód lazy inicializací.. má to taky svoji režii a má smysl to řešit dodatečně. Ne prvoplánově.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 21. července 17:15
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:

Ano, zobrazí se mi to, ale to je proto, že je to moje vlákno, pokud bych to vlákno nevlastnil, tak se o odpovědi nedozvím. Díky za reakci :)

 
Nahoru Odpovědět 21. července 17:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.