Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Unsafe mode u C#u

[es] :: .NET :: .NET Desktop razvoj :: Unsafe mode u C#u

[ Pregleda: 2329 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

k4rl0
Localhost

Član broj: 87683
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Unsafe mode u C#u29.03.2007. u 22:36 - pre 206 meseci
Brzo i kratko:
Koliko je unsafe mod C#-a koristan,dali dobiva na brzini,sto omogucava i koliko je isplativ i u kojim situacijama?
Hvala..
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
*.adsl-2.sezampro.yu.



+2 Profil

icon Re: Unsafe mode u C#u30.03.2007. u 11:48 - pre 206 meseci
U nekim slučajevima potreban je direktan pristup memoriji pa je dodat unsafe code.
Unsafe code ćeš koristiti veoma retko, a možda i nikad.

Kada ćeš koristiti unsafe code:
- Externe funkcije koje nisu iz .Net framework-a, a koje zahtevaju pointer kao argument. Primer je Windows API i ili neki .dll napisan u c/c++ čije f-je zahtevaju pointere...
- Real-time aplikacije gde želiš da poboljšaš preformanse. Mada takve aplikacije se u startu ne pišu u C#.
- Svuda gde je iz nekog razloga potreban direktan pristup memoriji jer jedino preko pokazivača možeš da barataš sa podacima na najefektivniji način.

Unsafe code ne treba da bude zamena za pisanje C/C++ koda unutar C#. Svaki od ovih jezika ima svoju primenu.
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Unsafe mode u C#u30.03.2007. u 15:09 - pre 206 meseci
Ne bih se u potpunosti slozio sa svim ovim. Jedini performance benefit koji unsafe mode donosi sam po sebi je pristup nizovima preko pointera (gde se stedi na proveri granica niza). Sve ostalo ide istom brzinom, cak nekad i sporije (ako koristis pinned objekte ili GCHandle na managed objekte direktno se mesas u posao GC-a i usporavas upravljanje memorijom plus overtime da se objekat zakljuca/otkljuca).

Unsafe nije zamisljen kao low-level c#, to je jednostavno "logicka granica" gde prestaje da vazi .NET type safety (strong typed casting) i kao posledica toga prestaje da vazi type security (posto mozes npr da pinujes string i da ga vezes na char* pa stringovi izgube immutable karakterisitku, vidi kod dole), a sve to da bi se omogucio marshaling izmedju .NET-a i native sistema (C/C++ lib, COM, etc). Dakle kod se izvrsava isto kao i pre samo sto je sad to neka zona sumraka u kojoj je sve dozvoljeno , al na sopstveni rizik.

Code:

        static unsafe void test()
        {
            string test1 = "Trla baba lan";

            GCHandle gh = GCHandle.Alloc(test1, GCHandleType.Pinned);
            char* t1 = (char*)gh.AddrOfPinnedObject().ToPointer();
            *t1 = 'X';

            Console.WriteLine(test1);  // ispisace "Xrla baba lan"
        }

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

k4rl0
Localhost

Član broj: 87683
Poruke: 142
*.adsl.net.t-com.hr.



Profil

icon Re: Unsafe mode u C#u30.03.2007. u 15:39 - pre 206 meseci
Citat:
A sve to da bi se omogucio marshaling izmedju .NET-a i native sistema (C/C++ lib, COM, etc)


Jel preko unsafe codea onda moguce koristit native C++ API-je..?
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Unsafe mode u C#u

[ Pregleda: 2329 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.