Gå til innhold

Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

.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.

Skrevet

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?

Skrevet
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....

Skrevet

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..

Skrevet

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)

Skrevet

Så langt jeg vet jobber den stort sett på idle time. Det er vel relativt sjelden den "stjeler" ressurser samtidig med at andre, tyngre prosesser kjører.

Skrevet

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 ?

Skrevet

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.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...