Seite 3 von 3

Verfasst: 13.02.2009 08:53
von cxAlex
Ich würde stat PeekX() mit Pointern arbeiten, das ist theortisch noch ne Spur schneller.

Verfasst: 13.02.2009 10:20
von Tafkadasom2k5
hjbremer hat geschrieben:Dieses Blockweise lesen ist ja gut und schön, aber wir haben 2009
Heutige Rechner haben mindestens 500 MB, meistens 1 GB und Windows XP und der Rest brauchen ca 200-300 MB. Bleibt also genügend über um eine 100 MB Datei in den Speicher zu laden.
Soweit hast du natürlich Recht, aber das Einlesen in den Speicher kann man damit auch sehr gut optimieren.

Warum nun gerade 65536 Bytes zutreffen weiß ich auch nicht genau. Bei Fat16 würde ich das nachvollziehen können, aber bei NTFS weiß ich das auch nicht. Oder gibt es einen Befehl, der eine Datei in den Speicher einließt und dabei autmatisch beürkcsichtigt, was bei dieser HD am schnellsten wäre?

Bei dem Rest gebe ich dir Recht- wenn erstmal im Speicher ist, ist das alles kein großes Problem mehr!

Verfasst: 13.02.2009 15:47
von PMV
cxAlex hat geschrieben:Ich würde stat PeekX() mit Pointern arbeiten, das ist theortisch noch ne Spur schneller.
PeekX() benutzt Pointer. :?
... was du meinst, sind wohl zusätzliche Strukturen, welche direkt auf den
Speicherbereich zeigen sollen. Was da schneller sein soll ist mir zwar
schleierhaft, aber bei PB kann man das ja nie wissen, bevor man nicht den
ASM-Code gesehen hat :lol:

MFG PMV

Verfasst: 13.02.2009 16:34
von ts-soft
PMV hat geschrieben:Was da schneller sein soll ist mir zwar
schleierhaft, aber bei PB kann man das ja nie wissen, bevor man nicht den
ASM-Code gesehen hat :lol:

MFG PMV
Es fällt der Call weg!

Verfasst: 13.02.2009 23:14
von hjbremer
kleines Beispiel was mit zusätzlichen Structuren gemeint ist

Code: Alles auswählen

Procedure FindChar13(*z.Character, ende)

  For *p.Character = *z To ende
   
    If *p\c = 13
       ProcedureReturn *p
    EndIf
    
  Next

ProcedureReturn 0
EndProcedure
Aber strchr_ ist etwas schneller

Verfasst: 14.02.2009 02:24
von PMV
ts-soft hat geschrieben:Es fällt der Call weg!
Stimmt ... das Springen auf die richtige Adresse und das Push und Pop für
die Parameter ... hät ich auch selber drauf kommen können :oops:

@hjbremer
Deine Schleife funktioniert so nur im ASCII Modus. :wink:

Code: Alles auswählen

Procedure FindChar(*Start.CHARACTER, Size.i, ToFind.c) 
  Protected *End = *Start + Size - SizeOf(CHARACTER)
  
  While *Start <= *End
    If *Start\c = ToFind 
       ProcedureReturn *Start 
    EndIf
    *Start + SizeOf(CHARACTER)
  Wend
  ProcedureReturn #False 
EndProcedure
:D

MFG PMV

Verfasst: 14.02.2009 09:17
von hjbremer
gibs noch was anderes ? :mrgreen: