Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.05.2011, 13:59

Dateizugriff - einige Verständnisfragen

Hey ,

ich wollte gern wissen ob es überhaupt SInn macht die als zweites vorgestellte Technik bezüglich Dateizugriff zu verwenden ( Am Beispiel vom Logger ) .

Es wird da ja die alte Version ( aus C ) verwendet:

C-/C++-Quelltext

1
2
fopen();
fprintf();..


In einem Artikel habe ich gelesen, dass sich folgende Vorteil bezüglich der neuen Variante (mit ifstream, ofstream, fstream) zur alten C Variante gibt :

  • Die Operationen werden auf Typsicherheit überprüft.
  • Sie können eine Ausnahmebehandlung verwenden.
  • Wenn Sie ostream und istream verwenden, kann bereits beim Kompilieren sichergestellt werden, dass nicht versehentlich in Dateien geschrieben wird, die nur zum Lesen geöffnet wurden.
Dann habe ich auch noch irgendwo aufgeschnappt, dass die alte Variante etwas schneller sein soll, als die neue...

Seh ich das nun als richtig an, wenn man sagt man verwendet immer die neue Variante weil sie sicher ist und die Geschwindigkeit beim schreiben von Daten nicht wirklich relevant ist.
Oder sollte man sagen man verwendet immer die alte Variante da sie schlicht und ergreifend schneller ist ?!?!

LG
Sebastian

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

21.05.2011, 14:15

Nimm die neue mit den Streams. Praktisch ist da kein Unterschied allein anhand der verwendeten Calls spürbar für den Nutzer. Es handelt sich dabei um Milli- oder Mikrosekunden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

21.05.2011, 14:24

weil sie sicher ist und die Geschwindigkeit beim schreiben von Daten nicht wirklich relevant ist.

Relevant ist sie schon. Aber hier ist der limitierende Faktor eher die Festplatte.
Deswegen lieber immer die neuen Streams benutzen, besonders weil sie einfacher zu benutzen sind. :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

22.05.2011, 17:41

Man kann vermutlich Fälle konstruieren, in denen die alten C Funktionen gerade noch messbar schneller sind als Streams, aber das ist Blödsinn. Der Unterschied ist in seltenen Spezialfällen vielleicht relevant, und dann wäre man eh ein Experte auf dem Gebiet, also mach dir keine Gedanken darüber.
Viel interessanter ist die Frage, ob man nicht gleich zum Beispiel XML Dateien oder boost::serialization benutzen möchte, womit man noch komfortabler Dateien schreiben kann.
Lieber dumm fragen, als dumm bleiben!

5

22.05.2011, 17:54

Man kann vermutlich Fälle konstruieren, in denen die alten C Funktionen gerade noch messbar schneller sind als Streams, aber das ist Blödsinn. Der Unterschied ist in seltenen Spezialfällen vielleicht relevant, und dann wäre man eh ein Experte auf dem Gebiet, also mach dir keine Gedanken darüber.
Viel interessanter ist die Frage, ob man nicht gleich zum Beispiel XML Dateien oder boost::serialization benutzen möchte, womit man noch komfortabler Dateien schreiben kann.
Die C-Varianten sind immer dann sinnvoll, wenn a) sehr große Datenmengen im Spiel sind und/oder es sehr schnell gehen muß (Memory Mapped Files kann man auch erst in einen std::string kopieren, klar :P )

korrigiere mich, wenn ich falsch liegen sollte


MfG
dispy

6

22.05.2011, 23:27

Extra nochmal in Effektiv C++ nachgelesen: Die alten C Funktionen sind prinzipiell nie sinnvoll. Wenn Geschwindigkeit wirklich wichtig ist (ist es eigentlich nie) kann man vielleicht bis auf die Treiberebene runtergehen und da was optimieren. Aber eigentlich bringt auch das nix, man würde vermutlich einfach eine SSD kaufen und glücklich sein.

Das wichtige ist es, sich über so Dinge keine Gedanken zu machen. Es mag das ein oder andere geben, was ein bisschen schneller ist oder ein bisschen weniger Speicher braucht, aber eigentlich ist es immer gut, das moderne und komfortable zu benutzen, es sei denn man hat gute Gründe dagegen.
Lieber dumm fragen, als dumm bleiben!

7

23.05.2011, 17:01

Nochwas: Das Streams "langsamer" sind; beruhte meines Wissens nach darauf, dass es mehr Funktionsaufrufe gibt, als bei einem xprintf. Halt für jedes << einen und wenn man zwischendurch noch ein paar manipulator Objekte hat natürlich noch mehr. Das ist dann aber CPU Last und hat nix mehr mit der Festplatte zu tun. Was die Bibliothek intern macht, weiß man eh nicht, was das Betriebssystem macht schon gar nicht.
Nicht das es auf so ein paar Funktionsaufrufe normalerweise ankommen würde, aber bei Prozessen die viel mit der Festplatte interagieren langweilt sich die CPU eh.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige