Rychlost .NET   zodpovězená otázka

Optimalizace

Zdravím,

teď jsem četl 1. díl seriálu "VB.NET od začátku". Je v něm napsaný že se program přeloží do mezikódu a při prvním spuštění se zkompiluje přímo pro daný počítač.

Chtěl bych se zeptat, jestli když např. spustím program na "počítači" Intel Core2 (program se zkompiluje pro tento procesor), zkopíruju ho např. na flešku a přenesu ho např. na 486ku zda bude fungovat = přeloží se znovu?

Nebo ho musím zkompilovat ve VisualStudiu, nespouštět a "distribuovat" na další počítače.

Díky za případnou odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na každém počítači, kde program spustíte, se aplikace zkopiluje speciálně pro procesor. Tuto vymoženost normální Windows neumí, takže je třeba spoštět .NET aplikaci na počítači, kde je nainstalován .NET framework. Po přeložení pro daný počítač se aplikace normálně spustí zoptimalizovaná. K vaší otázce: aplikace se přeloží sama, s VS to nemá vůbec nic dělat - VS vytvoří jen mezikódovou aplikaci, která se na každém počítači, kde ji spustíte, přeloží speciálně pro procesor.

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

To vím, já jen jestli se už jednou přeložená aplikace (pro určitý procesor) dokáže znovu přeložit pro jiný procesor.

V článku je napsané že se uloží pro ten a ten procesor a pak už se spouští jen přeložený program.

Asi tedy program obsahuje kód který zjistí jestli je program pro procesor např. Core2 a když zjistí že byl zpuštěn na AMD znovu se přeloží a uloží tato verze.

Jestli to chápu dobře.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přeložený program nepřepíše ten mezikódový, je uložen někde ve složce Windows. Aplikaci, kterou zkompilujete ve VS, můžete využít kolikrát chcete na všech možných počítačích...

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

Díky, to jsem chtěl vědět.

Já právě myslel že ten "mezikódový" program se přeloží a do sebe uloží i optimalizovaný kód pro určitý procesor.

Takže když se program přeloží uloží si někam přeložený program (třeba na "c:\program.exe") a já když spustím "mezikódový" program tak zavolá ten na c:\...

Díky moc za vysvětlení

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Překládají se pouze části programu které jsou zrovna potřeba a zajišťuje to CLR, ne sám program. Pokud chcete maximálně optimalizovat program pro daný počítač, dá se v rámci instalace zajistit kompletní předkompilování celé aplikace z MSIL kódu do nativního kódu - aplikace se spustí rychleji a v průběhu programu nebude třeba nic dokompilovávat. Dělá se to nástrojem CLR Native Image Generator (ngen.exe), který je součástí Microsoft Windows SDK.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, nechci dělat program pro konkrétní počítač. Jen mě zajímalo jak se s tím program (potažmo .NET) vypořádá když už se program jednou zkompiloval a najednou se spustí na jiným počítači.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zřejmě jste to nepochopil. Optimalizace pro konkrétní počítač proběhne v každém případě, jde pouze o to, zda-li se ta optimalizace provede kompletně před prvním spuštěním aplikace (tudíž může aplikaci zrychlit), nebo jestli optimalizace probíhá průběžně za běhu programu dokompilováváním potřebných částí (výchozí stav všech .NET aplikací). Zkompilovaná .NET aplikace je vždy pouze CIL (MSIL) kód a teprve za běhu se překládá do nativního kódu procesoru (pokud nepoužijete výše zmiňovaný ngen.exe).

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

Díky, už to snad chápu :)

nahlásit spamnahlásit spam 0 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