diff options
author | whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-04-20 15:29:48 +0000 |
---|---|---|
committer | whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-04-20 15:29:48 +0000 |
commit | 34988301a511ca8552a954c231fafde007cb94a1 (patch) | |
tree | c3c4f520a33301ca081999e4d80016704e1226fc /Game/Code/Classes | |
parent | 6a7518ffc93647ec4da4ed151186b858a271626b (diff) | |
download | usdx-34988301a511ca8552a954c231fafde007cb94a1.tar.gz usdx-34988301a511ca8552a954c231fafde007cb94a1.tar.xz usdx-34988301a511ca8552a954c231fafde007cb94a1.zip |
Some Memory tweaking (13 MB Less Ram using at 800 Songs)
Some Loading Time tweaking (From 8 Secs to 6 Secs on my Computer)
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@123 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to '')
-rw-r--r-- | Game/Code/Classes/USongs.pas | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/Game/Code/Classes/USongs.pas b/Game/Code/Classes/USongs.pas index cc3c8b95..4240d135 100644 --- a/Game/Code/Classes/USongs.pas +++ b/Game/Code/Classes/USongs.pas @@ -58,6 +58,9 @@ type end;
TSongs = class
+ private
+ BrowsePos: Cardinal; //Actual Pos in Song Array
+ public
Song: array of TSong; // array of songs
Selected: integer; // selected song index
procedure LoadSongList; // load all songs
@@ -100,10 +103,14 @@ begin Log.LogStatus('Initializing', 'LoadSongList');
// clear
- Setlength(Song, 0);
+ Setlength(Song, 50);
+ BrowsePos := 0;
// browse directories
BrowseDir(SongPath);
+
+ //Set Correct SongArray Length
+ SetLength(Song, BrowsePos + 1);
// if Ini.Debug = 1 then BrowseDir('D:\Extract\Songs\');
end;
@@ -125,14 +132,19 @@ begin if FindFirst(Dir + '*.txt', 0, SR) = 0 then begin
// Log.LogStatus('Parsing file: ' + Dir + SR.Name + '\' + SRD.Name, 'LoadSongList');
repeat
+ //New Mod for better Memory Management
+
+ SLen := BrowsePos;
+ {//Old
SLen := Length(Song);
- SetLength(Song, SLen + 1);
+ SetLength(Song, SLen + 1);//}
+
Song[SLen].Path := Dir;
Song[SLen].Folder := Copy(Dir, Length(SongPath)+1, 10000);
Song[SLen].Folder := Copy(Song[SLen].Folder, 1, Pos('\', Song[SLen].Folder)-1);
Song[SLen].FileName := SR.Name;
- if (AnalyseFile(Song[SLen]) = false) then SetLength(Song, SLen)
+ if (AnalyseFile(Song[SLen]) = false) then Dec(BrowsePos)
else begin
// scanning complete, file is good
// if there is no cover then try to find it
@@ -146,6 +158,14 @@ begin // Song[SLen].Cover := Song[SLen].Path + Song[SLen].Cover;
end;
+ //Change Length Only every 50 Entrys
+ Inc(BrowsePos);
+
+ if (BrowsePos mod 50 = 0) AND (BrowsePos <> 0) then
+ begin
+ SetLength(Song, Length(Song) + 50);
+ end;
+
until FindNext(SR) <> 0;
end; // if FindFirst
FindClose(SR);
|