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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

13.02.2008, 21:14

Ok.
Ich habe es ausprobiert und zuerst nichts entdeckt. Dann habe ich hald ein künstliches Leck geschaffen. Und ich habe wirklich keine Löcher. :D

Das führt mich zu der Frage, die ein bisschen OT ist, aber naja.
Ich habe nicht sooo extrem darauf geschaut, dass es keine Löcher habe. Einfach normal, aber wieso haben den recht viele Spiele in jedem Update irgendwelche Memoryleaks Bugs, die sie beheben?
Sind das einfach extreme Ausnahmefälle, die hald bei einem grossen Projekt öfters vorkommen?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

13.02.2008, 23:54

Bei großen Projekten sitzt dir die Zeit im Nacken und nur weil du den Speicher irgendwann man freigibst, heißt das nochlange nicht, dass es sobald wie möglich freigegeben wird. Auch spielt die Komplexität echt eine wichtige Rolle. Erst neulich habe ich unser Projekt mal umgebaut und aufgeräumt. Man glaubt garnicht was sich da alles mit der Zeit an Codefragmenten "ablagert". Egal ob nicht mehr funktional, auskommentiert oder schlichtweg überholt. Und wenn schon ganze Codeblöcke mal in Vergessenheit geraten, dann passiert das mit den Speicherbereichen allemal. Auch muss man bedenken, dass mehrer Leute gleichzeitig daran arbeiten und oft jeder von denen einen anderen Stil hat. Sprich der eine geht davon aus, dass er den Speicher löschen muss, der andere geht davon aus, dass der übergebene Bereich gelöscht wird und dergleichen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

13

17.02.2008, 00:07

Hallo,
nochmals Danke!

Ich habe jetzt den gesamten Code umgebaut, da es Blödsinn ist, den Soundbuffer jedesmal neu einzulesen, denn nur so kann dieses Speicherleck entstehen, und außerdem verbraucht das Programm nur unnötig Rechnerleistung.

Jetzt habe ich es so gelöst:
Beim initialisieren werden meine 14 Wavesounds in Buffer eingelesen. Mit DuplicateSoundBuffer erstelle ich pro Sound weitere 4 Buffer, sodass einen einzelnen Sound gleichzeitig bis zu 5mal abspielen kann. (Insgesamt also 70 Buffer; Speicherverbrauch im Ram: konstant 2,5 MB nur für die Sounds ohne Restprogramm)

Damit ist das Speicherproblem gelöst! :D

ABER:
Ab ca. dem 35. Soundbuffer (zusammengerechnet die "originalen" von Wavedateien erstellen und die mit DuplicateSoundBuffer erstellen) wird der Sound nur noch in den beiden Front-Boxen meines 5.1 Systems wiedergegeben.

Wenn ich nur z.b. statt 5 nur 3 kopien der 14 buffer erstelle, tritt das problem auch beim ca. 35. Soundbuffer, aber bei einem anderen Wavesound als vorher auf. Es scheint, als ob DirectSound ab einer gewissen Größe im Ram den Sound auf die Frontboxen "kürzt"/beschränkt...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

14

17.02.2008, 11:18

Ich vermute mal, dass entweder DirectSound aus Leistungsgründen dicht macht oder vielleicht auch einfach deine Soundkarte. Ich meine, dass auch irgendwo steht wieviele Sounds parallel abgespielt werden können, frag mich aber bitte nicht wo.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige