AGB  ·  Datenschutz  ·  Impressum  







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

Festplattencache planen

Ein Thema von gsh · begonnen am 14. Nov 2007 · letzter Beitrag vom 14. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Festplattencache planen

  Alt 14. Nov 2007, 18:12
Hi Leute

Ich will in meinem Programm einen Festplattencache integrieren. So nun wie mach ich den des jetzt am besten ist die Frage.

Ich hab mir zwar schon was überlegt bin aber noch nicht ganz zufrieden mit meiner idee und jetzt wollt ich mal euch fragen was ihr da so macht/machen würdet.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Festplattencache planen

  Alt 14. Nov 2007, 18:12
Warum das?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: Festplattencache planen

  Alt 14. Nov 2007, 18:50
Weil ich die daten von der festplatte puffern möchte damit falls mal für kurze zeit die festplatte ausgelastet ist immer noch daten zur verfügung stehen warum sonst???
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Festplattencache planen

  Alt 14. Nov 2007, 18:55
Zitat von gsh:
Hi Leute

Ich will in meinem Programm einen Festplattencache integrieren. So nun wie mach ich den des jetzt am besten ist die Frage.

Ich hab mir zwar schon was überlegt bin aber noch nicht ganz zufrieden mit meiner idee und jetzt wollt ich mal euch fragen was ihr da so macht/machen würdet.
Hallo,

einfach NICHTS. I/O-Buffering, Caching etc. etc. werden vom Betriebssystem Windows verwaltet und GEMEINSAM optimiert - jeder Eingriff von Userseite kann die Leistung des Gesamtsystems nur verschlechtern.

Das ist nicht nur die Meinung von MS, sondern auch der meisten Fachleute, auch meine, und das liegt nicht daran, dass MS so genial ist, sondern dass grundsätzlich das BS am besten weiss, was mit dem Speicher anzufangen ist; insofern gilt das auch für jedes andere BS, das überhaupt eine Speicherverwaltung hat.

Am besten anstatt Caching sind Memory Mapped Files zu verwenden - aus Sicht des Programmierers ist alles im Speicher, was aktuell geladen wird, bestimmt das BS.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#5

Re: Festplattencache planen

  Alt 14. Nov 2007, 18:58
naja aber windows weiß ja nicht was ich mit der datei machen möchte.

aber Memory Mapped Files klingt eigentlich ganz interessant. Mal schaun was ich in der suche drüber finde
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Festplattencache planen

  Alt 14. Nov 2007, 19:12
Zitat von gsh:
naja aber windows weiß ja nicht was ich mit der datei machen möchte.
Du kannst es aber Windows mitteilen - und dieses passt dann entsprechend sogar seinen Cache-Algorithmus darauf an. Siehe dazu auch CreateFile() und dort die zusätzlichen Flags:

FILE_FLAG_WRITE_THROUGH, FILE_FLAG_SEQUENTIAL_SCAN, FILE_FLAG_RANDOM_ACCESS, FILE_FLAG_OVERLAPPED, FILE_FLAG_OPEN_NO_RECALL und FILE_FLAG_NO_BUFFERING.

Dabei hat FILE_FLAG_OVERLAPPED nur einen Nebeneffekt in Bezug auf den Cache.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#7

Re: Festplattencache planen

  Alt 14. Nov 2007, 19:18
ah cool

kann ich des mit TFileStream auch verwenden? Des wär mir lieber
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Festplattencache planen

  Alt 14. Nov 2007, 19:20
Zitat von gsh:
kann ich des mit TFileStream auch verwenden? Des wär mir lieber
Jain. Leite von THandleStream ab und bau die Flags mit ein. Dann hast du mit einem neuen Constructor deinen FileStream mit deinen Flags...
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#9

Re: Festplattencache planen

  Alt 14. Nov 2007, 20:44
Zitat von Muetze1:
Zitat von gsh:
kann ich des mit TFileStream auch verwenden? Des wär mir lieber
Jain. Leite von THandleStream ab und bau die Flags mit ein. Dann hast du mit einem neuen Constructor deinen FileStream mit deinen Flags...
ahm des mag ich überhaupt nicht

geht es nicht z.b. über TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Festplattencache planen

  Alt 14. Nov 2007, 21:23
Zitat von gsh:
ahm des mag ich überhaupt nicht
Und was stört dich daran?

Zitat von gsh:
geht es nicht z.b. über TFileStream.Create(const AFileName: string; Mode: Word; Flags: word);
Aber genau sowas kannst du dir doch bauen damit:

Delphi-Quellcode:
  TFlagFileStream = Class(THandleStream)
  Public
    Constructor Create(const FileName: string; const AMode: word);
    Destructor Destroy; Override;
  End;

...

constructor TFlagFileStream.Create(const FileName: string; const Mode: word; Flags: Word)
var
  lHandle: THandle;
begin
  if AMode = fmCreate then
  begin
    lHandle := CreateFile(PChar(FileName), GENERIC_READ Or GENERIC_WRITE,
                                    0, Nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL or Flags, 0);

    if lHandle < 0 then
      raise EFCreateError.CreateResFmt(PResStringRec(@SFCreateError), [FileName]);
  end
  else
  begin
    lHandle := CreateFile(PChar(FileName), GENERIC_READ Or GENERIC_WRITE,
                                    0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or Flags, 0);

    if lHandle < 0 then
      raise EFOpenError.CreateResFmt(PResStringRec(@SFOpenError), [FileName]);
  end;

  inherited Create(lHandle);
end;

destructor TFlagFileStream.Destroy;
begin
  FileClose(Handle);

  inherited;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:50 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