Jag är inte intresserad av att googla för dig, det är allmän vetskap.
Skrivet av tufflax:
Jo, det är som med Java. C# (eller bytekoden man får när man kompilerar) körs i en virtuell maskin, och Java har också JIT-kompilering.
Du har haft så rätt hittills så varför har du så fel på denna grundläggande punkten helt plötsligt?
http://stackoverflow.com/questions/9556354/if-c-sharp-is-not-...
Citat:
The VM is just an abstraction of a microprocessor. It is just a definition and does not really exist. I.e. you cannot run code on the VM; however, you can generate IL code for it. The advantage is that compilers do not need to know details about different kinds of real processors. Since different .NET languages like C# or VB (and many more) produce IL, they are compatible on this level. This, together with other conventions like a common type system, allows you to use a DLL generated from VB code in a c# program.
The IL is compiled just in time on Windows and ahead of time in Mono. In both cases, native machine code for the actual processor is generated. This fully compiled code is executed on the REAL microprocessor!
Dold text
Skrivet av tufflax:
Varför skulle det vara lättare att slarva i C#? Det där med att man inte behöver tänka på lika många saker köper jag inte riktigt. Det är väl snarare en nackdel med C++.
Det är lättare att slarva i C# för att du alltid har GC där som städar upp efter dig, det är lätt att göra något horribelt misstag där man inte släpper en resurs och då kommer lilla mamma GC och gör det åt dig för en liten kostnad.
Det finns så mycket dåliga sätt att lösa saker på med .Net biblioteken och man vet inte vilket som är bättre för att implementationen är dold för dig.
Det blir lätt "Åh, detta ser ut som det jag behöver... Ah, det funkade. Då kör vi på det!" men sedan visar det sig att om man bara hade kollat lite närmare på det så hade man insett att det fanns effektivare metoder att göra samma sak på.
Det är inte att jämföra med en dålig implementation i C++ som man skrivit själv, då har man bara sig själv att skylla för att den inte är snabb nog.
I C# finns det många olika alternativ att välja och vissa är bättre än andra trots att dom gör i princip samma saker.
Skrivet av martinrlilja:
Menar bara att det egentligen tar onödig CPU-tid, som Haikarainen också verkade snacka om. Försökte egentligen bara förklara för tufflax om det han frågade om, och varför det skulle kunna ha betydelse för servern. Dock, som sagt håller jag med dig om att i sammanhanget spelar det ytterst lite roll för TS. (Just nu åtminstone)
Ja, all form av GUI tar kraft. Så sätt har du helt rätt i att ju mer grafiskt GUI du har desto mindre kraft har du till Servern.
Men nu vill jag inte direkt påstå att det är ett tungt GUI och dessutom sitter det ju inte och hoggar massa resurser i onödan.
Alla program har en "main loop", oavsett om dom är console, "system" eller winforms applikationer. I denna mainloop finns det någon form av PEEK för att kolla om det finns meddelanden i kön för det programmet.
Finns det inga meddelanden så görs inget med GUI't och all kraft läggs på resten.
Windows är inte optimalt för en server dock, det vet vi ju redan. Men det duger gott och väl!
Skrivet av martinrlilja:
Några små syntetiska benchmarks; http://benchmarksgame.alioth.debian.org/u32/benchmark.php?tes... Så ser det ut som om C är normalt dubbelt eller upp till 14 gånger snabbare än C# (Mono). Där finns en overhead och den bör man inte glömma. Kan tänka mig att de små skillnaderna kan bli relevanta om man har väldigt många fiender i spelet som alla måste animeras och hitta från punkt A till punkt B. Eller som TS snackade om att han hade performance problem när väldigt många spelare på ett litet område. Även om det är ytterst svårt att säga vad som är problemet i detta fallet utan att ha sett någon kod.
Alla dom benchmarks körs i Mono. Mono != .Net, senast jag kollade hade Mono fortfarande problem med prestandan för C# applikationer.
Skrivet av martinrlilja:
Funderade att om man kan köra VisualBasic och C# på samma sätt måste de också ha ett gemensamt språk under ytan? Alltså att det som ligger i EXE-filen inte är C# kod utan någon form utav array utav bytes som formerar kod, därav bytecode. Men det är inget jag har kollat upp.
http://en.wikipedia.org/wiki/Common_Language_Runtime
Det spelar ingen roll vilket språk man skriver i, dom riktar sig mot CLR som är den egentliga kompilatorn. Man kan säga att språket är .Net och C#, VB och F# är olika smaker på samma språk. Dom översätts alla till CLR språk.
Igen, Mono != .Net...
Skrivet av martinrlilja:
Tror dock det kan bli problem med Assembler om man plötsligt skaffar sig hundratals ARM-processorer istället för, säg x86 processorer?
Ja, då får man ju programmera en verision för ARM enheter. En för Windows, en utan windows, en för 32 bitars, en för 64 bitars.... ad infinitum.
Alla för hand, intruktion för instruktion.
Det är därför vi har High Level languages...
Men vissa saker piffas upp i Assembler för att klämma ut lite extra prestanda, speciellt i spel.
Tror inte det går att göra med C# program dock, om man inte JIT ändrar bytekoden som JIT Compiler genererar innan programmet startar. (på riktigt)
Hoppar över en del av ditt inlägg, har inga kommentarer.
Skrivet av martinrlilja:
Har inte gått datorvetenskap eller så, men jag har för mig att events bara är en abstraktion utav hårdvaran från, bland annat OS:et.
Om inte jag är helt ute och cyklar nu så... En event är lite som en callback funktion.
När ett event triggas så körs flera funktioner på samma gång från samma utgångspunkt. Som vi alla vet (eller?) så är en funktion inget mer än en address i minnet där en viss mängd instruktioner befinner sig som skall köras.
Med andra ord, ta parametrar X, Y, Z, ... och anropa funktioner A, B, C, ...
Vissa events triggas från formens messagepump. Som t.ex musklick, musrörelser, tangentbordstryck, ändra storleken på fönstret etc etc.
Andra triggas då programmet kommit till en viss punkt i sin exekvering. Som t.ex Form.Load, när winformen laddas och Form.Shown, när fönstret ritats upp för första gången. (Eller efter att ha varit dolt)
Det är ingen speciell skillnad på ett event i .Net och en messagepump i C++.
Lite mer overhead (och därför användarvänligare) är allt. Men events triggas inte tusen gånger per sekund (om inte programmeraren ser till att så sker förståss) ändå, en droppe i havet.
Skrivet av martinrlilja:
Menade att man kan starta de flesta *NIX system i ett headless läge, alltså utan någon GUI, bara en commandline. Har för mig att det var länge sedan man kunde göra detta på en windows-dator.
Går med fördel att starta Windows i väldigt grundläggande läge. Men eftersom Windows är Windows (fönster) så startas ju alltid den mest grundläggande fönsterhanteraren när man startar Windows... Annars startar man ju inte Windows!
Men det finns också en kernel i Windows, precis som det finns en Linux kernel. Man kan (om man verkligen vill) bara starta Windows Kernel, utan GUI.
Varför någon skulle göra detta vet jag dock inte. Då kan man ju lika gärna köra Linux för Windows är sämre än Linux.