Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 13:55

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
BeitragVerfasst: Mi Jan 11, 2012 02:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Abgespalten von C# für Java-Devs --Horazont

Jupp, .Net kann sehr praktisch sein, deswegen auch die Fragen bzgl. dem Bereich.
C#, .Net und Spieleentwicklung sind so angenehm wie eine offene Fleischwunde am Fuß.
.Net hat die blöde Angewohnheit häufig Objekte temporär zu erzeugen und der GC tut diese auch fleißig weg räumen aber die GC's sind derbe lahm und man hat schnell mal eine delta time von über 33ms und damit ein Lag. Kommt man dann noch in den Genuss auf Mobilen Geräten zu arbeiten, dann freut man sich richtig, wenn man mit ein 200Mhz RAM 60ms warten darf, bis mal 500KB weg geräumt wurden.
Threading macht auch eine menge Spaß, da ja jeder Thread sein eigenen Memory Pool zusätzlich hat und jeder Thread darf selber den GC quälen und dann kommt es natürlich auch zu gerangel, wenn man 20-30 Threads hat, die sich gegenseitig den GC locken.
Bei C# läuft auch fast alles auf dem Heap und nur 1-2 ausnahmen auf dem Stack, wäre ja Verrückt, wenn der Entwickler den schnellen Memory-Allocator nutzten dürfte.
Sollte man dann mal so verrückt sein und kritische Funktionen unmanaged entwickeln, dann muss man natürlich wieder die Super Nanny spielen, weil der GC prinzipiell die übergebenen Parameter schon mal weg räumt, während noch der unmanaged Code drauf arbeitet. Gibt natürlich Möglichkeiten dem GC bei zu bringen, dass er erst bei Scopeende wirklich eine lokale Variable weg räumt aber sowas merkt man ganz schnell, wenn man das Programm crashen sieht.
Mit den Generics von C# kann ich mich auch nicht anfreunden, wenn man templates von C++ kennt ist das wie "mit dem Fingernägeln, statt der Bohrmachiene ein Loch zu bohren".
Dann noch die blöden Array und String Klassen und das ständige hin und her konvertieren, wobei man wieder neue Objekte temporär erzeugen muss, nur um damit zu arbeiten.
Abschließen tu ich dann mit Mono und VC# compiler, die irgendwie noch nicht wissen, dass man eine Schleife mit konstanten start,end und counter entrollen könnte.

Auf der anderen Seite ist es super einfach mal eben ein größeres Tool zu realisieren, sofern es nur auf Windows laufen soll ^^.
Mit ein bisschen Wissen kann man dann aber auch super schnell Tools für PC entwickeln.

PS.: Der Post tendiert irgendwie stark gegen C#, wenn ich so scrolle ^^

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Na Thomas, malste mal wieder den Teufel an die Wand? :))))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 11:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Thomas. Sag doch nicht so was. Das wäre fast nicht aufgefallen.

Wobei ich die Unterschiede im Vergleich zu Delphi schon alle sehr praktisch finde. In Verbindung mit Studio fühl man sich als Entwickler wirklich unterstützt und hat nicht das Gefühl gegen die Sprache und IDE zu kämpfen. Wobei für mich der Schwerpunkt auch nur bei normalen Anwendungen für Windows liegt. Mono hatte ich zum Anfang noch mit in Betracht gezogen. Aber in Abwegung des Nutzen im Vergleich zu den Einschränkungen auch recht schnell verworfen.

Zum Thema Tutorials/Bücher. Als Einstieg kann ich da auch Wikipedia empfehlen. Wenn man schon anderen Sprachen mal aus der Nähe gesehen hat, fasst die Sprachelemente Seite das alles recht gut zusammen. Das Galileo Buch ist da sehr viel geschwätziger. Das finde ich teils dann auch umständlich da was zu finden. Sollte man aber auch nicht komplett außer acht lassen. Wobei ich bei Galileo teilweise das Gefühl habe, dass Online einige Kapitel fehlen (keine Ahnung ob das im Download auch so ist).
http://de.wikipedia.org/wiki/C_Sharp
http://de.wikipedia.org/wiki/Sprachelemente_von_C-Sharp

Das Hauptproblem dürfte aber wohl eher nicht die Sprache an sich werden sondern wo findet man seine Klassen um zum Beispiel eine Datei zu öffnen. Wenn man weiß wie die entsprechende Klasse heißt kann man sie einfach schreiben und Studio erweitert per Kontextmenü darauf die Using Anweisung um den entsprechenden Namespace. In den MSDNs befindet sich aber auch eine komplette Dokumentation der Klassen. Fast überall mit entsprechendem Codebeispiel. Zu mal die MSDNs auch via F1 im Studio aufgerufen werden können und meistens gleich auf der richtigen Klassen stehen. Vorrausgesetzt man weiß wie die Klasse heißt. Ansonsten muss man wohl gerade am Anfang immer wieder im Netz suchen wie die Klassen gerade heißen. Aber das ist bei einer neuen Sprache ja auch vollkommen normal.
http://msdn.microsoft.com/de-de/library ... 90%29.aspx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Lossy eX hat geschrieben:
Das Hauptproblem dürfte aber wohl eher nicht die Sprache an sich werden sondern wo findet man seine Klassen um zum Beispiel eine Datei zu öffnen. Wenn man weiß wie die entsprechende Klasse heißt kann man sie einfach schreiben und Studio erweitert per Kontextmenü darauf die Using Anweisung um den entsprechenden Namespace. In den MSDNs befindet sich aber auch eine komplette Dokumentation der Klassen. Fast überall mit entsprechendem Codebeispiel. Zu mal die MSDNs auch via F1 im Studio aufgerufen werden können und meistens gleich auf der richtigen Klassen stehen. Vorrausgesetzt man weiß wie die Klasse heißt. Ansonsten muss man wohl gerade am Anfang immer wieder im Netz suchen wie die Klassen gerade heißen. Aber das ist bei einer neuen Sprache ja auch vollkommen normal.
http://msdn.microsoft.com/de-de/library ... 90%29.aspx

Das Problem hab ich auch ab und zu, z.B. wusste ich nicht, dass es eine Debug Klasse gibt http://msdn.microsoft.com/en-us/library ... debug.aspx. Heute hab ich versucht raus zu bekommen, wie man mit C# Signals abfangen kann und nach gut 10min suche hab ich dann auch http://docs.go-mono.com/?link=C%3aMono. ... .Signum%29 gefunden. Eigentlich sollten ja die Namespaces hilfreich sein aber das ist eher selten der Fall.

Das schöne an C# ist, dass man VS2010 nutzten kann und das ist bis dato die beste Sprach/IDE Kombination, die ich je gesehen habe. Ich tippe ein paar zeichen und VS kann mir dank JIT schon beim schreiben sagen, dass ich programmierfehler gemacht hab, da es on the fly immer neu kompiliert und alles makiert. Mit 2010 ist das auch für C++ teilweise implementiert worden und soll in der nächsten Version wohl so gut wie für C# sein(hab ich in einem Blog gelesen, der die Vorabversion testet).
Allerdings hat man dafür die includes aufgegeben und viele Restriktionen beim programmieren eingeführt und das macht meiner Meinung nach C# unleserlicher als C++ und das muss was heissen.
Selbst der Versuch, von MS, mit Regions noch was zu retten ist kläglich gescheitert.

Diese Erfahrungen muss man erstmal machen, da sie in keinem Buch zu finden sind -_-

Code:
  1. foreach (MyEnum elementOfMyEnum in Enum.GetValues(typeof(MyEnum)))// go through all elements of a enum
  2.     if (name.Contains(elementOfMyEnum.ToString()))// get the name of element and check if it's contained in name
  3.         index = (int)elementOfMyEnum;//found an element which fit to the name

Sowas ist einfach AWESOME und hätte ich in C++ auch gerne :)

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 17:16 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Zitat:
foreach (MyEnum elementOfMyEnum in Enum.GetValues(typeof(MyEnum)))// go through all elements of a enum
if (name.Contains(elementOfMyEnum.ToString()))// get the name of element and check if it's contained in name
index = (int)elementOfMyEnum;//found an element which fit to the name


sollte auch noch einfacher gehen :)

var index = Enum.GetValues(typeof(MyEnum)).Where(e => name.Contains(e.ToString()).Select(e => (int)e).FirstOrDefault();

und das gibts auch ähnlich in C++11 :)

Thomas, guck dir mal Enum.{Try}Parse an :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Lossy eX hat geschrieben:


http://msdn.microsoft.com/en-us/library/67ef8sbd(v=VS.100).aspx der link hier sollte auch etwas hilfreicher sein...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Mi Jan 11, 2012 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
C# und Java sind eigentlich ziehmlich ähnlich, daher würde ich Bücher nur für diverse Spezialfälle wie Entity Framework, ASP.NET, WPF usw empfehlen. Ansonsten geben MSDN und Wikipedia hier nen guten Überblick über die Eigenheiten der Sprache.

Natürlich kann man eine Menge Kritik an C# äußern, allerdings geht das Meiste was man so im Netz ließt völlig am Konzept der Sprache vorbei (ähnlich wie auch bei Java und sogar weniger relevant, da man sich wesentlich leichter Abhilfe schaffen kann).

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 00:37 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ich programmiere sehr viel in C# und habe mich über den mit Beitrag von TAK2004 sehr gewundert.

Zitat:
GC's sind derbe lahm und man hat schnell mal eine delta time von über 33ms

Ich habe noch nie bemerkt, das meine Anwendung so langsam ist.
Vor längerer Zeit habe ich mal ein Spiel in Managed DirectX programmiert und das lief bei mir mit über 100FPS.

Zitat:
wenn man 20-30 Threads...

Wozum Kuckuck brauchst du 30 Threads???
Mein Maximum war bei 3 Threads.

Zitat:
Super Nanny spielen, weil der GC prinzipiell die übergebenen Parameter schon mal weg räumt

Ist das zb. in C\C++ besser?
Spätestens beim Aufräumen der Objekte muss man hier auch richtig Super Nanny spielen, da einem sonst die Speicherlecks die Luft abschnürren.
Soooo häufig braucht man jetzt auch keinen Unmangedcode.

Zitat:
Mit den Generics von C# kann ich mich auch nicht anfreunden, wenn man templates von C++ kennt ist das wie "mit dem Fingernägeln, statt der Bohrmachiene ein Loch zu bohren".

Ich kenne die C++ Templates zu wenig um hierzu was zu sagen.
Was ist an denen den so viel besser?

Zitat:
Dann noch die blöden Array und String Klassen und das ständige hin und her konvertieren.

???
Ich kann micht nicht erinnern einmal eine Stringklasse oder ein Array konvertiert haben zu müssen.
Besonders die Stringklasse ist einfach bloß super. Wenn s zu langsam ist, gibts auch noch den StringBuilder.
Ich weiß nicht wie es diesbeüglich in C++ und so aussieht, aber ich denke da gibts nicht für jeden Zweck eine passenden Listentype. (Also ohne selbstbastellein und Includegewurstel)

Zitat:
wobei man wieder neue Objekte temporär erzeugen muss, nur um damit zu arbeiten.

Beispiele?
Bei den Strings ist das so, aber sonst?



Irgendwie habe ich das Gefühl, das dir nicht ganz klar ist wofür C# gedacht ist.
Weder für highend 3D Grafik(obwohl man das bis zu gewissen Grenzen auch hinbekäme) noch für Betriebsystemtreiber. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
phlegmatiker hat geschrieben:
http://msdn.microsoft.com/en-us/library/67ef8sbd(v=VS.100).aspx der link hier sollte auch etwas hilfreicher sein...
Richtig. Die Programming Guide ist auch nicht unsinnig. Gerade wenn einige Strukturen noch nicht gefestigt sind. Habe ich auch schon öfters rein geschaut.

TAK2004 hat geschrieben:
Sowas ist einfach AWESOME und hätte ich in C++ auch gerne :)
Hat phlegmatiker ja schon gesagt. Der spezielle Fall geht sogar noch deutlich einfacher. Und vielleicht auch schneller, weil das dann von .NET optimiert werden kann. Dafür LINQ anzusetzen (wie phlegmatikers erster Vorschlag) ist aber auch schon übel. Das zähle ich fast schon in die Kategorie "Man kann mit jeder Sprache hässlichen Code erzeugen", wenn man sich nur stark genug anstrengt. ;)

Die Übersicht finde ich in den meisten Fällen vollkommen ausreichend. Allerdings habe ich mir da auch wirklich angewöhnt viele Regions zu verwenden. Obendrein gibt es noch Sachen wie aufgeteilte Klassen etc. Da hat man schon viele Möglichkeiten seinen Code zu organisieren. Viele Sachen kann man aber auch auch der Ferne erledigen. Also wie bei einer Klasse eine noch nicht existirende Methode aufrufen (stellt man ja meist da fest wenn man was benutzen will). Dann kann Studio einem die Methode bei der Klasse mit allen Parametern direkt erstellen. Per F12 wechselt man zur Definition der Methode, befüllt sie und mit Navigation zurück wieder zurück.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 12:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
OpenglerF hat geschrieben:
Wozum Kuckuck brauchst du 30 Threads???
Mein Maximum war bei 3 Threads.

Mono hat schon gute 2-3 Threads alleine, da ist nicht mal mein Hautpthread mit drin, dann kommen noch je nach CPU gut 4-16 Stück für nen Threadpool dazu, noch ein paar Threads für Netzwerk, GameLogik, Sound und da komm ich bei nem Gameclient schon problemlos auf 20-30 stück. Beim alten Server(c++) haben wir auch mal 1600Threads gehabt, weil async api unter unix mehr probleme macht aber nicht schneller als die kernel threads über Version 2.6.

OpenglerF hat geschrieben:
Ist das zb. in C\C++ besser?
Spätestens beim Aufräumen der Objekte muss man hier auch richtig Super Nanny spielen, da einem sonst die Speicherlecks die Luft abschnürren.
Soooo häufig braucht man jetzt auch keinen Unmangedcode.

C# nimmt ein zwar viel Speichermanagment ab aber man gewöhnt sich halt dran und wenn man nicht weiß, dass die GC von VS2010, Mono und MonoTouch sich selbst zwischen den Versionen unterschiedlich um den Speicher kümmern, dann ist es mir lieber mich um alles selber zu kümmern(fehler unanfälliger). Im C++ nutzt man in der Regel RAII Pattern um das Problem mit vergessenden Pointer zu lösen und Probleme mit Memoryleaks(wird oft in Diskussionen übertrieben) in meiner Software konnte ich bisher an einer Hand zählen.
Hätte man generell gesagt, die Objekte werden am Scopeende dereferenziert, dann bräuchte man sich garnicht um solche Probleme mit managed Code kümmern und es wäre wirklich eine nennenswerte Erleichterung gegenüber C++ gewesen.

OpenglerF hat geschrieben:
Ich kenne die C++ Templates zu wenig um hierzu was zu sagen.
Was ist an denen den so viel besser?

Templates werden zur compile time bzw. link time instanziiert während generics zur laufzeit instanziiert werden.
Daraus ergeben sich viele optimierungsmöglichkeiten bei Templates und natürlich metaprogramming.
Templates können Variablen, die zur Compile-Time bereits bekannt sind auswerten, z.B. Hashes von Strings ausrechnen oder branching auflösen. Wenn es jemanden nicht auf Performance ankommt, ist er mit Generics auch glücklich.

OpenglerF hat geschrieben:
???
Ich kann micht nicht erinnern einmal eine Stringklasse oder ein Array konvertiert haben zu müssen.
Besonders die Stringklasse ist einfach bloß super. Wenn s zu langsam ist, gibts auch noch den StringBuilder.
Ich weiß nicht wie es diesbeüglich in C++ und so aussieht, aber ich denke da gibts nicht für jeden Zweck eine passenden Listentype. (Also ohne selbstbastellein und Includegewurstel)

Spätestens, wenn du binary Netzwerk Protokollen arbeitest bist du am konvertieren und das war nicht das einzige mal.
Ja die Stringklasse ist wirklich sehr gut und mit StringBuilder kann man auch wieder einiges an Perf raus holen, wenn man Stringoperationen macht aber das Problem liegt hier wieder beim Konvertieren.
Man kann zig operationen auf ein Speicherbereich ausführen, ohne auch nur zu merken, dass die CPU überhaupt was gemacht hat aber ein Memory Allocation/Deallocation kostest vergleichsweise unmengen an Zeit.
Dabei ist nicht mal der GC, von C#, alleine schuld. Memory Allocation, sofern der Pool aufgebraucht ist, werden zum Kernel weiter gegeben und der braucht auch noch ein stücken Zeit(passiert zum glück nicht so oft).
Da aber .Net recht häufig auf nicht veränderbare Objekte setzt ist der GC am arbeiten, während man noch in einem Algo ist und das macht dann alles langsamer und Als Spieleentwickler ist langsamer immer schlecht.
Dies bedeutet nicht, dass man mit C# keine Spiele machen kann aber es bedeutet dass man mit anderen Sprachen, wie z.B. C++ wesentlich mehr aus der Hardware holen kann, ohne ein Codetechnischen mehraufwand.

Zum Thema Listentypen, diese sind nicht C# sondern .Net und das ist auch super. C++ ist allerdings schon gut 10 Jahre älter und entsprechend gibt es dort wesentlich mehr Auswahl wie z.B. QT oder Boost.

OpenglerF hat geschrieben:
Beispiele?
Bei den Strings ist das so, aber sonst?

DateTime, TimeSpan, Array, so gut wie alle Klassen aus für Lineare Algebra und mit mehr Zeit könnte ich noch einige mehr im Code finden. Diese sind aber so die wichtigsten, da man mit diesen jeden Frame mehrmals rum hantiert.

OpenglerF hat geschrieben:
Irgendwie habe ich das Gefühl, das dir nicht ganz klar ist wofür C# gedacht ist.
Weder für highend 3D Grafik(obwohl man das bis zu gewissen Grenzen auch hinbekäme) noch für Betriebsystemtreiber. ;)

Doch ist mir sehr wohl klar, ich schätze das ist wohl im laufe des Threads verloren gegangen.
TAK2004 hat geschrieben:
C# für welchen Bereich ? Mobile, Windows only, PC only, cross, realtime und/oder Toolsentwicklung.

TAK2004 hat geschrieben:
Ich mach ja cross echtzeit entwicklung und da ist C# .Net 2.0 mehr eine schwere Behinderung als ein segen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 12:33 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
mir scheint Du bist auf dem Stand von 2002, als .NET gerade angefangen hat...

bleib einfach beim guten alten C++ :) oder guck dir C++11 an...

Und wenn Du mal BF3 oder BF2 oder MW3 anschmeißt.... dann wirst Du auch keine 30 threads sehen.... hihi ich halte mich ab sofort lieber raus sonst wird wider geschmipft...

Der Buchvorschlag bleibt bestehen... zum einen der "C# Programming Guide" in der msdn (wer nen schnellen Einstieg in C# im allgemeinen haben möchte) - das Platform gebrabbel ist davon unabhängig, ob nun WP7 oder CE oder XNA... die Sprache ist die gleiche.... und das C# and the .NET Platform Buch vom apress Verlag (wer lieber gerne nen echtes Buch liest)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 14:57 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
Spätestens, wenn du binary Netzwerk Protokollen arbeitest bist du am konvertieren und das war nicht das einzige mal.

Kann es sein das du da irgendwas falsch (bzw. unnötig kompliziert) gemacht hast?
Ich habe auch schon viele Binäredateiformate verwendet, aber von so einem Problem weiß ich nichts.
Bei speziellen Anwendungen kann man auch immer noch selber eigene Klassen schreiben, die nicht so häufig konvertiert werden müssen.

Zitat:
Da aber .Net recht häufig auf nicht veränderbare Objekte setzt ist der GC am arbeiten, während man noch in einem Algo ist und das macht dann alles langsamer und als Spieleentwickler ist langsamer immer schlecht.

Das ist ein Problem welches ich als masslos überschätzt ansehe.
Wie gesagt, ich habe mal ein ein Spiel programmiert und das war hinreichend schnell, obwohl ich einen Programmierstill draufhatte, das es der Sau graust. (Zb. habe ich damals (war noch vb.net) keine list verwendet, sondern immer Arrays mit "Redim" verkleinert oder vergrößert.)

Zitat:
Dies bedeutet nicht, dass man mit C# keine Spiele machen kann aber es bedeutet dass man mit anderen Sprachen, wie z.B. C++ wesentlich mehr aus der Hardware holen kann.

Das stimmt natürlich, habe ich auch nie abgestirtten.

Zitat:
ohne ein Codetechnischen mehraufwand.

Das hingegen ist nachweißlich ziemlicher Blödsinn. Seis auch nur wegen dem umfangreichen Framework.

Zitat:
Zum Thema Listentypen, diese sind nicht C# sondern .Net und das ist auch super.

Das die Listentype im eigentlichen Sinne zum Framework und nicht zu C# gehören ist schon klar.
Das Framework wurde aber wiederrum selbst großteils mit C# programmiert und zu 90% von C#-Programmierern verwendet.

Zitat:
DateTime, TimeSpan, Array

DateTime und TimeSpan habe ich schon sehr lange nicht mehr verwendet. Sind auch recht spezielle Klassen die man in der Regel kaum braucht. Wenn du mit Netzterprotokollen arbeitest, ist das aber vielleicht anders. ;)



Wenn ichs besser beherrschen würde, würd ich auch zb. Spiele ausschliesslich in C++ entwickeln.
Aber das für eine typische Windowsanwendung mit (umfangreicher) GUI das selbe Ergebnis mit C# wesentlich schneller zu erreichen ist als mit C++ kann wohl keiner abstreiten.

Zitat:
mir scheint Du bist auf dem Stand von 2002, als .NET gerade angefangen hat...

Da er weiß das es Generics gibt, ist dem aber nicht so.
Teilweiße habe ich aber auch denn Eindruck das so manches Vorurteil aus der Zeit stammt.
Er ist halt noch einer "der alten Cplusplusler". Beidenen C++ das einzige ist, was was taugt.
(Wobei es da noch viiieeeeeeeel schlimmere gibt. ;))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 15:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich bin auf dem Stand c# .Net 3.5 aber ich mach Spieleentwicklung und das nicht nur auf mein kleinen Windows, wo ich ne Heile Welt mit .Net4, coolen TaskSystem und nen sehr guten VC# compiler hab.
Ich arbeite Beruflich damit und das auf mehreren Betriebsystemen und Hardware(PC, Smartphone, Tablets).
Anfangs war ich voll begeistert von C# und .Net4, weil alles so wunderbar unter Windows funktioniert aber das war auch schnell vorbei.
Schau mal in MonoTouch und Mono, da bist du froh wenn du keine Exception bekommst, weil du ein Array MemberwiseClone willst(fixed mit 2.10.2) oder kein Abort methode von Thread nutzten kannst, wiel MonoTouch diese nicht supported.
Der SGen GC von Mono 2.8 und erst mit 2.10.4 sauber laufend ist auch locker 10-100x schneller(produziert aber immer noch bei überlastung memleaks und ist für echtzeit immer noch recht langsam) aber wenn du gezwungen bist auf Mono 2.6 zu arbeiten, weil die Client Engine Unity3D es nutzt, dann hast du keine Wahl.
Selbst der aktuelle VC# compiler tut nicht mal schleifen entrollen, SIMD oder neuere cpu instructions optimieren.
C# und .Net haben kein SIMD support und Mono nur als Extension, in neueren Versionen.
Wenn du auf ein iPad1 1,7MB an Objekt garbage weg räumst, braucht das knapp 1sek, weil die Software und Hardware langsam sind und die Hardware wiederrum die Software noch langsamer macht.

Mit den 30 Threads hast du falsch verstanden. VC# hat 4 Threads beim start und wenn du ein Threadpool verwendest je nach cpu noch 1-16 weitere. Also hast du in meinem Fall schon mal 20 Threads(intel 8 kerner hat 16 hardware threads).
Dann kommen noch Threads, von externer Software(Unity3D z.B. hat für so ziemlich alle Module ein Thread), wo man kein einfluss drauf hat und dann hab ich noch 1 Thread auf dem client(netzwerk kommunikation).

Auf dem Server hab ich früher 1:1 Prinzip angewendet, da er auf Unix lief und mit Kernel 2.6 ein Patch rein kam, der 1Thread pro blocking Socket so performant machte wie async sockets aber es ist wesentlich weniger fehleranfällig und man muss weniger coden. Das Bottleneck bei der Technik ist die maximal anzahl an Threads ~65k pro Prozess.
Der große Nachteil bei der Technik ist, dass man den Server verdammt schlecht debuggen kann, wenn man erstmal die Threads suchen muss, wo es crashed und man diese aus ein Pool von 1600 Stück(konnte mit den PC's die ich da hatte kein weiterne Clients mehr erzeugen um weiter zu testen) suchen muss.
Daher werde ich mein nächsten Server auch Async mit ThreadPool schreiben, damit dauert die Entwicklung zwar länger aber die Zeit für Maintane wird kürzer und das ist der wichtigere Teil.

Zum Thema C++ und C++11. Ich würde gerne C++ programmieren aber mein Arbeitgeber will das nicht und daher mach ich das nur noch Privat und ja ich benutze auch ein bisschen von C++11 aber da muss man noch vorsichtig sein, welche neuerungen man verwendet, weil die noch nicht auf allen größeren Devkits laufen.

Übrigend BF3 nutzt auch CPU abhängige Threadpools, da die ein Software Rasterizer für Occlusion Culling nutzten, sowie noch ein recht komplexes Animationssystem haben. Noch dazu sind die Games keine C# Games und damit ist es ein schlechter vergleich ;)

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Zuletzt geändert von TAK2004 am Do Jan 12, 2012 15:35, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich würde gerne die Disskussion weiter führen aber dieser Thread ist nicht dafür gedacht, daher kann wer die letzten Post mal abtrennen und in ein neuen Thread packen.
Ich bin ja auch nicht der beste Programmierer der alles kennt(vorallem mein C# Kenntnisse sind über 3 Jahre in Firmenprojekten selbst angeeignet) und wir reden hier über einige Dinge, die ich recht interessant finde.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C# für Java-Devs
BeitragVerfasst: Do Jan 12, 2012 16:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
TAK2004 hat geschrieben:
Ich würde gerne die Disskussion weiter führen aber dieser Thread ist nicht dafür gedacht, daher kann wer die letzten Post mal abtrennen und in ein neuen Thread packen.

Erledigt. So kompliziert war Abtrennen aber noch nie O_o. Ich glaub da ist mir nen Bug über den weg gerollt. Naja, diskutiert mal fleißig weiter ;)

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]