GeorgC++ schrieb:
Eines meiner Programme beschreibt und liest sehr oft eine kleine Datei.
Kleiner als ein Kilobyte. Wird dabei auf die Festplatte zugegriffen, oder
hält das Betriebssystem ( Hier Windows XP Home ) die Datei in einem RAM-
Speicherbereich ( Cache ) ?
Beim Lesen wird im Prinzip immer gecached. Beim Schreiben normalerweise auch - der Inhalt wird dann "bald" auf die Festplatte rausgeschrieben. Wenn du aber z.B. innerhalb einer Sekunde eine Datein 10x überschreibst, dann wird die nicht 10x auf die Platte geschrieben.
Und "beim Schreiben normalerweise auch" heisst: solange das schreibende Programm das Caching nicht verbietet, bzw. explizit "flush" sagt. (Das tun z.B. Datenbanken, oder andere Programme, die garantieren wollen/müssen, dass irgendwas zu einem bestimmten Zeitpunkt wirklich auf die Platte rausgeschrieben wurde, und daher z.B. einen Stromausfall überleben kann)
Sonst würde wohl die Festplatte schnell fragmentiert werden.
Die Fragmentierung ändert sich durch das Caching kaum. OK, es gibt Fälle wo Caching die Fragmentierung verringern kann (wenn das Dateisystem mitspielt, wobei ich nicht weiss ob NTFS das kann). Allerdings wird deine Platte ja nicht dadurch fragmentiert wenn du immer wieder die selbe Datei überschreibst. Würdest du tausende kleine Dateien anlegen, dann einige davon wieder löschen, und zwischendurch noch grosse Dateien schreiben, wäre es etwas anderes.
Noch eine Frage, kann es sein, dass bei NTFS die keinste Speichereinheit 4 Kilobyte beträgt ?
Die Default-Clustergrösse von NTFS ist 4kB. Das heisst auch dass Platz für Dateien in 4kB Einheiten reserviert wird. NTFS verwendet aber einige Optimierungen, so dass ganz kleine Dateien (sagen wir ein paar hundert Byte gross) nicht gleich einen ganzen Cluster für den Inhalt verbrauchen.
Du kannst aber (bei Platten mit 512 Byte Blöcken, was Standard ist) auch Cluster-Grössen von 512 Byte bis 64kB verwenden.