AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Optimiert Dateien laden

Ein Thema von Shaman · begonnen am 16. Dez 2004 · letzter Beitrag vom 16. Dez 2004
Antwort Antwort
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

Optimiert Dateien laden

  Alt 16. Dez 2004, 16:25
Hallo zusammen

Mich interessiert, wie man am schnellsten (binäre) Dateien laden kann. Ich dachte mir, am besten gehts wohl, wenn man immer so ein Kilo auf einmal lädt. So etwa stelle ich mir das vor:

Delphi-Quellcode:
const
  BLOCK_SIZE = 1024;

function LoadFile(const FileName: string; out Data: PChar): Int64;
var
  Handle: Integer;
  Size: Int64;
  BytesRead: Integer;
  P: PChar;
begin
  Data:= nil;
  Result:= -1;
  Handle:= FileOpen(FileName, fmOpenRead or fmShareDenyWrite);
  if Handle <> -1 then
  try
    Size:= GetFileSize(FileName);
    GetMem(Data, Size);
    try
      P:= Data;
      repeat
        BytesRead:= FileRead(Handle, P^, BLOCK_SIZE);
        Inc(P, BytesRead);
      until BytesRead = 0;
      Result:= Size;
    except
      FreeMem(Data, Size);
      Data:= nil;
    end;
  finally
    FileClose(Handle);
  end;
end;
Was meint ihr dazu?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Optimiert Dateien laden

  Alt 16. Dez 2004, 16:34
until BytesRead = 0; Sollte besser heissen
until BytesRead < BLOCK_SIZE; Sonst liest Du nach dem letzten Block nochmal ein, falls die Dateigröße nicht ohne Rest durch BLOCK_SIZE teilbar ist.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: Optimiert Dateien laden

  Alt 16. Dez 2004, 16:57
Zitat von Shaman:
am besten gehts wohl, wenn man immer so ein Kilo auf einmal lädt.
Als Aufschnitt oder am Stück?

Ja, im Prinzip ist's so besser als wenn du jedes byte einzeln einliest, die Blockgröße hängt aber vom Dateisystem und der sonstigen Umgebung (konkurrierende Zugriffe auf die Festplatte, konkurrierende Zugriffe auf die gleiche Datei, etc) ab. In dem Fall könntest du sogar die gesamte Datei auf einmal einlesen, da du alle Daten haben willst und linear liest. Bei zufälligem Lesen oder wiederholtem Lesen von kleinen Datenmengen bietet sich aber ein größerer Puffer an.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz