Chcel by som sa opytat na nejake rady ohladom optimalizacie programu alebo teda programov. Ide konkretne o to aby co najmenej zatazovali procesor. Su nejake typi alebo rady ako to docielit? Myslim tym napr. nejake definovanie premennych ale zjednodusovanie cyklov a tak. Dakujem za odpovede
Fórum › .NET
Optimalizacia programu (zrychlenie, mensie naroky na procesor)
Zapomeň na vnořování. Rozděl aplikaci do více vláken. Omez cykly a větvení. (třeba místo větvení používej mapy. (slovníky)) Zjisti si náročnost použitého řešení v každém bodě - a nahraď jej obsáhlejším, leč méně náročnějším kódem. Obecně platí, co si uděláš sám, bude lepší, než obecný návrh Frameworku. Jenže to je to - v C# musíš dodržovat především OOP. Takže ono se moc náročnosti procesoru zbavit nedá - spíše se dá snížit využití CPU... C# jede na automatické správě paměti, OOP atd. V C# jde tedy o něco jiného, než o rychlost programu atd. Proto bude nejlepší si zvolit jiný jazyk... .NET se zaměřuje vyloženě na OOP - jde tedy o snížení velikosti programů, snížení zatížení CPU atd. Ale ten kterýžto všechno spojuje dohromady - interpret - musí nějak žít... Vlastně ještě by šlo psát aplikace přímo v CIL - tím by jsi program taktéž optimalizoval... A samozřejmě vydávej release verze...
typi? type, typ, druh ; tips, tooltips, tip do loterie, tip jako nahrh, napad
Do asp nedelam, ale je to podobne php.
V php je dobre oddelit vypis od zpracovani. Cili si nejdriv zpracuji data z databaze, programu a ulozim do promennych. Udelam funkce, tere mi ulozi do promenne html kod a az pak teprve generuji stranku a vypisuji do ni obsah promenny. Znacne se tim zprehledni kod a i zpracovani je rychlejsi, protoze je obvykle nastavene php tak, aby na prikaz echo okamzite data odesilal a takovych 1000 radku tabulky se po jednom odesilanem radku zobrazovalo strasne dlouho.
Obecne u jazyku byva problem s pocitanim. Pokud to jde, provedet co nejmene vypoctu v realnem case a co nejmene slozite. Treba u pascalu a js pocitani v realnem case s pomoci Math.sin je o dost narocnejsi nez mit ulozenou tabulku s predgenerovanymi vysledky. Priklad, treba padani vlocek, pocitani sinusove drahy.
Mozna by bylo dobre uvest priklad nektereho tveho kodu, jakym zpusobem co resis.
#3 peter
Kde tu vidíš ASP(.NET)? Napsal jsi hned několik úplných kravin. Kde vidíš databáze? Především - přehlednost kódu - vzhled - odporuje rychlému kódu. Čím větší prasárny budeš dělat, tím lepšího výkonu dosáhneš. Jenže to neplatí pro virtuální stroje - tam je nedodržení OOP jen na škodu. Virtuální stroj, navíc řešený jako v .NET, si nepotrpí na rychlost programu, využití CPU/procesoru - o tu mu nejde. Zmíněné prasení myslím tedy ve volnějších jazycích (C/C++/...), kde se prasekódem optimalizovat dá. Tedy abych to ještě lépe upravil - čím vyšší jazyk, tím více dbá na zjednodušení syntaxe a tím více prase konstrukcí se skrývá pod hezkými slovy. Například v .NET vytahování položek z polí. I jen CIL mi stačil - natož ASM. Čím vyšší jazyk, tím se posouvá jeho cíl. Cílem dnešní doby jsou jazyky obsahující samá pěkná slova, která udělají co nejvíce věcí za programátora. A cílem je tedy optimalizace kódu, chyb,... Čím nižší jazyk použiješ, tím bude zdrojový kód obsáhlejší, ale vše ostatní mnohem nižší. (A program nebezpečnější.) Jak fyzická velikost, tak rychlost,... Nejrychleji a nejnenáročněji pojede program v ASM, ale v kódu se nevyzná skorem nikdo... Proto jak jsem psal - zásadou lepších kvalit programu je nižší jazyk a prasekód, ve kterém se horko těžko dá vyznat. Jako třeba v C/C++ šablony, pointery, předdefinice atd... Jak jsem ale psal - cenou za prasekód je bezpečnost. Respektive nebezpečnost - více chyb, více špatných návrhů,... Kdo se v tom ale dokáže vyznat, udělá téměř shodně bezpečný program jako v .NET a nároky budou nízké...
Ještě bych přidal ukázku kam to spěje - SQL... Tedy dotazovací jazyky obecně, které se snaží vetřít i do běžného programování. (mimo databáze/...) Tedy programy napsané bez cyklů, bez přílišného větvení,... Jenže pod těmi 3-XY slovy pro vytažení určitého množství dat ze zdroje pomocí dotazového splácance se neprovede nic pěkného a krátkého. Ovšem sem to směřuje. Co jsem slyšel, tak se má začít nadužívat rekurze atp. Já osobně nesnáším neznalost PC moderních programátorů a to, že se k tomu dostane každý... Začínal jsem v .NET, ale raději budu dělat aplikaci předlouho v nižším jazyku, zato však nebudu plácat zdroji... Ovšem, že chápu, že si dotazovací jazyky může dnešní PC dovolit 6x - ale stejně se mi příčí nevědět, co se pod těmi klíčovými slovy skrývá a nazývat výsledný program bezcyklickým.... Že bude kód bezpečnější? Tedy, že lidi nebudou dělat chyby atd.? Na to, jak to dopadá, se lze snadno podívat skrz deklarativní jazyky. Ti, co je znají, snad chápou, že imperativní přístup je rozhodně lepší... Což je tedy první věc - i když necháme dělat lidi chyby, pořád bude jejich řešení doplněné o mozek - řešení udělané PC bude mít chyby akorát dobře skryté... Tedy nehodlám uznávat řešení PC, dokud nebude pokořen Argument čínského pokoje... Tedy, až mi PC bude myslet, ať si za mě programuje - ale jinak chci mít možnost si řešení programu napsat sám...
#3 peter
A k tvé narážce na výpočty - to jsi napsal blbost blbostí... V prvé řadě je dobré naučit se používat logické a binární operace. V C# to znamená leda tak bitové posuny/součty/násobení. Dále pak lze využít pointery - v unsafe bloku. Dále je výhodné místo mnohých větvení naučit se myslet algoritmicky. Tedy aby řešení řešilo problém dvou výsledných kořenů... Tím mám na mysli spíše manipulovat s cílem, než jich dělat více... Každopádně složitých výpočtů se není proč bát - od toho tu máme cache atp. Násobení je z 90% bráno z výsledků minulého násobení, které tam zanechal jiný program... Čemu je dobré se vyvarovat, jsou počty vyšší, než násobení/dělení... Modulo, sqrt,... Každopádně důvod, proč je co jsi psal nesmyslné se dělí na 2 části - jak jsem psal - program nedělá neustálé výpočty - spíše využívá již vypočítaného a za další - vše je nakonec převedeno do ASM - a ASM je jen o počtech a adresaci...
optimalizace se dela obvykle tak, ze se napise program a pak se projede nejakym profilerem kde se to nejvic zdrzuje... pak se vymysli co s tim...
samozrejme to chce trosku premejslet nad tim co se dela... kdy se to dela, jak casto a tak...
nicmene v jazycich jako C# a java se clovek muze dostat jen na urcitou uroven...
v C++ se da uz jet i na urovni cache prediction a tak.. (ze se projizdi bloky pameti pekne poporade.. jak se zacne skakat tak je to pomaly)
urcite nikdy nedelat neco++ (zase kopie objektu protoze se pak potrebuje puvodni) lepsi je ++neco ...
--- no vznikl by z toho zatracene dlouhej seznam..
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zrýchlenie načítania stránky — založil Tomáš
Mafia a nároky — založil aw
PayPal - nároky na platební kartu — založil yaqwsx
Optimalizacia pre IE 5.5 — založil greppi
Optimalizacia MySQL — založil Flowy
Moderátoři diskuze