Gå til innhold

Anbefalte innlegg

Jeg tenker jo på at .NET er rimelig komplext og generellt kan man vel si at jo mere komplekst ting er, jo mere må det taes hensyn til runtime.

 

Nå er det vel slik at hvis man sammenligner VB, C#, etc i .NET versjonene så bør jo hastighet og optimalisering være omtrendt det samme så lenge man holder seg til .NET namespace, men er .NET så bra at man kan lage tids kritiske programmer? Eller er dette fortsatt forbeholdt ASM og C?

Lenke til kommentar
Videoannonse
Annonse

.Net kan være raskere enn prekompilerte programmer siden den kompilerer on-the-fly avhengig av prosessoren du har. (Du kan også precompilere med ngen.exe, men da blir det kompilert for "DIN" prosessor --- fordelen er at man får litt raskere oppstartstid).

 

Noen ting er mye treigere i .Net på grunn av "sandbox" funksjonaliteten man har. Den sjekker for overflow av tall og at du ikke skriver utenfor arrays. Fordelen med dette er at man ikke får mulighet for å utnytte buffer overflow svakheter i koden til hacking.

 

C# har mulighet for å bruke pointere og unsafe kode. Dette har ikke VB.Net. Dette kan gi STOR økning i hastighet.

 

En annen ting som kan gjøre .Net "hakkete" er at garbage collectoren kjører (u)regelmessig og kan bruke ressurser.

Lenke til kommentar
ok. C# har med andre ord absolutt sine fordeler.  Er overgangen fra VB til C# tung?

 

Når det gjelder GC, er det ikke mulig å styre denne selv?  Mener å ha sett et sted at man kan kalle opp denne og da kan man jo utføre dette ved leilighet, kan man ikke?

8455491[/snapback]

 

 

GC.Collect(); kjører garbage collectoren. Noe mer kontroll enn det tror jeg ikke man klarer å få til....

Lenke til kommentar

Så det betyr at man ikke f.eks. kan lage en egen inherited klasse og legge på en WAIT event som rett og slett pauser GC'n? Går jo ut ifra at GC'n er en loop i en eller annen form som rydder opp og hvis man kunne slengt noe inn i den som holdt igjen så ville man jo hatt mere kontroll. Men det lar seg vel ikek gjøre da..

Lenke til kommentar

Du kan bruke System.Runtime.interop.Marshal.GlobalAlloc for å manuelt allokere minne, dette blir da allokert utenfor gc.

For å hindre et objekt i å bli allokert, kan du bruke GC.SupressFinalizer.

Men å stoppe GC tror jeg ikke man kan (og det er vel strengt tatt ikke nødvendig heller)

Lenke til kommentar

Når vi først er inne på temaet. Jeg går jo ut ifra at GC "vet" om objektene fordi RTL sørger for å putte en referanse til alle sommen på en stack. Men jeg hører jo at noe heter Marshal. Hva innebærer dette? Mener å ha forstått det slik at marshall objekter ikke havner i denne "stacken"? Stemmer det? I så fall, hvordan forsikrer jeg meg om at disse blir fjernet? Og hva kjennertegner et slikt marshall objekt og hvorfor eksisterer de ?

Lenke til kommentar

Kan det være at du har snublet over noe relatert til COM og tilhørende herligheter?

 

http://www.thescripts.com/forum/thread253286.html

 

Stort sett kan du la være å tenkte på GC; det er ytterst få situasjoner du som applikasjonsprogrammerer vil ha behov for å manuelt (over)styre denne.

 

Jeg aner ikke hva et godt norsk ord for marshaling skulle være; men en kan vel si at det er en slags dirigent som er ansvarlig for at objekter/referanser/kall blir utvekslet mellom forskjellige systemer ihht en gitt metodikk.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...