Programavimas

Darbas su programų domenais .Net

Programos domenas yra lengvas procesas ir veikia kaip loginė riba, suteikianti kodo, programos saugumo, patikimumo ir versijų atskyrimo ribas.

Proceso ribos buvo naudojamos ilgą laiką, norint izoliuoti programas, vykdančias toje pačioje sistemoje. Atminkite, kad procesas yra programos egzempliorius. Ši izoliacija padeda programoms likti atmintyje ir vykdyti skirtingas proceso ribas. Taigi, dvi gijos toje pačioje programos srityje gali bendrauti tarpusavyje, tačiau dvi gijos, priklausančios dviem skirtingiems programų domenams, negali.

Gija yra mažiausias proceso vykdymo vienetas. Galite turėti kelis programos domenus, esančius viename procese, ir daugiau nei vieną giją programos domeno viduje. Programos domenas (paprastai vadinamas „AppDomains“) yra logiškas atskyrimo vienetas, leidžiantis tuo pačiu procesu vykdyti kelias programas, tuo pačiu užtikrinant, kad tam tikros programos domeno avarija nepaveiks kitos programos domeno veikimo.

Kodėl mums reikia programų domenų?

Bendrosios kalbos vykdymo aplinka užtikrina, kad vienoje programoje veikiantis kodas negali pasiekti kitos programos, veikiančios valdomos aplinkos kontekste, kodo ar išteklių. Kaip tai pasiekiama? Tvarkomas kodas arba kodas, vykdomas valdomos aplinkos viduje, turi būti patikrintas. Šis patikrinimas atliekamas CLR (bendrinės kalbos vykdymo laikas), siekiant užtikrinti tipo saugumą. Programų domenai padeda CLR užtikrinti reikiamą izoliacijos lygį, kad kelias programas būtų galima vykdyti vieno proceso kontekste, be didelių našumų, kad padidėtų mastelis.

MSDN teigiama: "Programų domenai yra saugesnis ir universalesnis apdorojimo vienetas, kurį bendrosios kalbos vykdymo laikas gali naudoti, kad būtų užtikrinta programų izoliacija. Viename procese galite paleisti keletą programų domenų su tokiu pačiu izoliacijos lygiu, kuris egzistuotų atskirose vietose. procesų, tačiau nepatiriant papildomų papildomų išlaidų, susijusių su kelių procesų skambučiais ar perėjimu tarp procesų “.

Programinių programų domenų kūrimas

Prieš programiškai kurdami naują programos domeną, panagrinėkime, kaip galime gauti dabartinio programos domeno ir vykdymo surinkimo metaduomenis naudodami C #. Šis kodo fragmentas iliustruoja, kaip galite rodyti programos domeną ir šiuo metu vykdomo surinkimo asamblėjos pavadinimus.

naudojant sistemą;

naudojant „System.Threading“;

naudojant „System.Reflection“;

vardų sritis „ApplicationDomains“

{

klasės programa

    {

static void Main (string [] args)

        {

Console.WriteLine (Thread.GetDomain (). FriendlyName);

Console.WriteLine (Assembly.GetEntryAssembly (). FullName);

Pultas.ReadLine ();

        }

    }

}

Panašiai galite gauti pagrindinio kompiuterio ir antrinių domenų metaduomenų informaciją naudodami statinius „AppDomain“ klasės narius.

naudojant sistemą;

vardų sritis „ApplicationDomains“

{

klasės programa

    {

static void Main (string [] args)

        {

AppDomain childApplicationDomain = AppDomain.CreateDomain („ApplicationDomain“);

Console.WriteLine ("Prieglobos domeno vardas yra:" + AppDomain.CurrentDomain.FriendlyName);

Console.WriteLine ("Prieglobos domeno ID yra:" + AppDomain.CurrentDomain.Id.ToString ());

Console.WriteLine ("Vaiko domeno vardas yra:" + childApplicationDomain.FriendlyName);

Console.WriteLine ("Vaiko domeno ID yra:" + childApplicationDomain.Id.ToString ());

Pultas.ReadKey ();

        }

    }

}

Galite sukurti naują programos domeną naudodami vieną iš perkrautų „CreateDomain“ metodų „System.AppDomain“. Atkreipkite dėmesį, kad visi šie metodai yra statiški, todėl jūs galite juos pakviesti, nes nereikia išaiškinti „AppDomain“ klasės. Čia pateikiamas „System.AppDomain“ klasės perkrautų „CreateDomain“ metodų sąrašas.

viešasis statinis „AppDomain“ „CreateDomain“ (eilutė „appDomainName“)

public static AppDomain CreateDomain (String appDomainName, Evidence securityInformation)

public static AppDomain CreateDomain (String appDomainName,

Įrodymų saugumasInformacija, „AppDomainSetup“ programaDomainSetupInformation)

public static AppDomain CreateDomain (eilutės pavadinimas,

Įrodymų saugumasInformacija, String appBasePath, String appRelativeSearchPath,

„Bool shadowCopyFiles“)

Programos domeną galite sukurti naudodami bet kurį iš šių perkrautų „CreateDomain“ metodų - šiam metodui galite tiesiog perduoti norimo sukurti programos domeno pavadinimą kaip parametrą. Taip pat galite perduoti saugos politiką, jei norite, kaip papildomą parametrą. „ExecuteAssembly“ metodas naudojamas įkeliant ir vykdant surinkimą programos srityje.

Šiame kodų sąraše parodyta, kaip galite sukurti naują programos domeną, tada įkelti ir vykdyti asamblėją naujai sukurto programos domeno viduje.

naudojant sistemą;

vardų sritis „ApplicationDomains“

{

klasės programa

    {

static void Main (string [] args)

        {

AppDomain applicationDomain = System.AppDomain.CreateDomain („AppDomain“);

applicationDomain.ExecuteAssembly (@ "D: \ Projects \ TestCode.exe");

Console.WriteLine ("Paspauskite bet kurį klavišą, jei norite iškrauti programos domeną ...");

Pultas.ReadKey ();

System.AppDomain.Unload (applicationDomain);

        }

    }

}

Vykdžius minėtą programą, bus sukurtas naujas programos domenas pavadinimu „AppDomain“, o tada į programos domeną įkelta ir vykdoma asamblėja (pavadinta „TestCode.exe“). Sukurtas programos domenas bus iškrautas paspaudus klavišą.

$config[zx-auto] not found$config[zx-overlay] not found