»Upravljana koda« je izraz, ki ga je ustvaril Microsoft® Coproration. Ta izraz se nanaša na programsko kodo, ki za uporabo zahteva uporabo navideznega stroja Common Language Runtime (CLR). Izraz “neupravljana koda” se uporablja za označevanje programske kode, ki ne potrebuje tega virtualnega stroja.
Common Language Runtime je bil razvit z namenom, da bi programom omogočili izvajanje na različnih računalnikih in operacijskih sistemih, ne da bi bilo treba spremeniti programsko kodo. Da bi to naredili, se koda računalniškega programa pretvori v bajtno kodo navideznega stroja. To bajtno kodo nato razlaga navidezni stroj CLR in jo pretvori v bajtno kodo za določen računalnik, v katerem se izvaja.
Upravljana koda se lahko izvaja na katerem koli računalniku, ki je opremljen z navideznim strojem CLR. Ta visoka stopnja prenosljivosti ji daje dokončno prednost pred neupravljano kodo. Neupravljana koda zahteva, da programerji spremenijo programsko kodo za uporabo na različnih strojih. Ta postopek je lahko počasen, lahko pa povzroči tudi številne napake v aplikaciji.
Druga prednost, ki jo ima upravljana koda, je njena povečana varnost. Varnost programa, narejenega z neupravljano kodo, je močno odvisna od izvedbe, ki so jo izdelali programerji. Uporaba navideznega stroja CLR pomaga programerjem odvzeti velik del varnostnih vprašanj. Večina varnostnih težav, ki se lahko pojavijo, je neposredno osredotočena na sam virtualni stroj. To samo po sebi pomaga centralizirati težave, zaradi česar je uvedba varnostnih popravkov veliko hitrejša.
Vprašanje, ali je določen niz kode upravljana ali neupravljana koda, je za računalniške programerje izjemno pomembno. Upravljana koda ima višjo stopnjo prenosljivosti, vendar ta prenosljivost zahteva, da je Common Language Runtime nameščen na ciljnem računalniku. Po drugi strani pa je neupravljano kodo mogoče izvajati brez dodajanja CLR.
Uporaba upravljane kode ima veliko prednosti, vendar obstaja tudi več pomanjkljivosti. Glavna pomanjkljivost so stroški, ki jih zahteva uporaba navideznega stroja CLR. Razlika med hitrostjo, s katero teče upravljana koda, in hitrostjo neupravljane kode je pogosto zanemarljiva, vendar v nekaterih primerih ustvari zelo opazno razliko v odzivnem času aplikacije. Posledično igra neupravljana koda ključno vlogo v večini aplikacij, ki zahtevajo visoko stopnjo hitrosti nad prenosljivostjo.