Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 3.188 pregleda

Najnovija ↓

Unsafe mode u C#u 29.03.2007. u 23:36 · pre 238 meseci #1
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..
Re: Unsafe mode u C#u 30.03.2007. u 12:48 · pre 238 meseci #2
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.
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Unsafe mode u C#u 30.03.2007. u 16:09 · pre 238 meseci #3
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"
        }
Potpis
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ć
Re: Unsafe mode u C#u 30.03.2007. u 16:39 · pre 238 meseci #4
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..?
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme