Das hier hab ich auch schon probiert bei mir ^^ Aber da werden nur die ersten paar KB schneller geschrieben... der rest wieder auf gewohntem Schneckentempo.
Code: Alles auswählen
For i = 256 To WordBookIndex ;4095 
mfg.
FlowPX2
Code: Alles auswählen
For i = 256 To WordBookIndex ;4095 
Code: Alles auswählen
Wert1.w = ByteA 
Wert2.w = ByteB 

Code: Alles auswählen
DisableDebugger
#SourceFile=0 
#EndFile=1 
Procedure.s Compress(FromFile.s,ToFile.s) 
  
  
  ;Dateien öffnen 
  OpenFile(#SourceFile,FromFile.s) 
  OpenFile(#EndFile,ToFile.s) 
  
  ;Wörter Buch 
 ; Dim WordBook.s(4096) 
  Dim NumWordBook(4095)
  
  For i = 0 To 255 
 ;   WordBook.s(i) = Str(i) 
    NumWordBook(i) = i
  Next 
  
  ;Byte und Word Variablen 
  Global Wert1.w = 0 
  Global Wert2.w = 0 
  Global Byte1.b = 0 
  Global Byte2.b = 0 
  Global Byte3.b = 0 
  Global Result.l = 0 
  
  WordBookIndex = 256 
  WordBookExist = 0 
  
  ;Zu komprimierende Datei laden 
  SourceFileSize = FileSize(FromFile.s)+1 
  Dim SourceBytes(SourceFileSize) 
  
  LoadCurPos = 0
  
  Repeat 
    SourceBytes(LoadCurPos.l) = ReadByte(#SourceFile)&$FF 
    LoadCurPos +1
  Until Eof(#SourceFile) 
  
  CurPos.l = 0 
  dummy.w = 0
  Repeat 
    WriteInFile = WriteInFile + 1 
    
    ByteA.b = SourceBytes(CurPos.l)      
    ByteB.b = SourceBytes(CurPos.l+1) 
    
    WordBookExist = 0 
  
    dummy = ByteA * 256 + ByteB 
    
    
    ;Prüfe ob in Wörterbuch schon vorhanden 
    For i = 256 To WordBookIndex-1
      
   ;   If WordBook(i) = Str(ByteA)+Str(ByteB)
    
      
      If NumWordBook(i) = dummy 
      
      If WriteInFile = 1 
        Wert1.w = i 
      Else 
        Wert2.w = i 
      EndIf 
      
      WordBookExist = 1 
      CurPos +1    ;Wenn im Wörterbuch vorhanden, dann nächstes Byte nicht nochmal verarbeiten 
        
        Break 
      EndIf 
    Next 
    
    
    If WordBookExist = 0
      
      
      ;Wenn nicht im Wörterbuch vorhanden 
      If WordBookIndex < 4096 
    ;    WordBook(WordBookIndex) = Str(ByteA)+Str(ByteB)
        NumWordBook(WordBookIndex) = ByteA * 256 + ByteB 
        WordBookIndex = WordBookIndex + 1 
      EndIf 
      
      If WriteInFile = 1 
        Wert1.w = ByteA 
      Else 
        Wert2.w = ByteA 
      EndIf 
    EndIf 
    
    
    
    ;Schreibe in Datei wenn genug Bits da sind um 3Bytes zu füllen 
    If WriteInFile = 2 
      
      !MOVZX Eax,[v_Wert1] 
      !MOV dx,[v_Wert2] 
      !SHL Edx,12 
      !OR Eax,Edx 
      !MOV [v_Result],Eax 
      !MOV [v_Byte2],ah 
      !MOV [v_Byte3],al 
      !SHR Eax,8 
      !MOV [v_Byte1],ah 
      
      ;Schreibe kompremierte version in Datei 
      
      WriteByte(#EndFile,Byte1.b&$FF); 
      WriteByte(#EndFile,Byte2.b&$FF); 
      WriteByte(#EndFile,Byte3.b&$FF); 
      
      WriteInFile = 0 
    EndIf 
    
    CurPos + 1 
    
  Until CurPos >= SourceFileSize 
  
  
  ProcedureReturn RetVal.s 
EndProcedure 
Start = gettickcount_()
Compress("C:\Test.wav","C:\Test.dat") 
Zeit = gettickcount_()-Start
MessageRequester("verstrichene Zeit",Str(Zeit)+" ms")

Code: Alles auswählen
    ;Prüfe ob in Wörterbuch schon vorhanden 
    Endloop = WordBookIndex -1
    
    For i = 256 To Endloop
