2015-06-08 9 views
5

Wie der Titel sagt; Kann ich mich auf MemoryMappedFile verlassen, um immer eine Datei voller Nullen zu erstellen? Ich habe getestet, indem ich einige neu erstellte Dateien gelesen habe, aber dieses "Testen" scheint sinnlos, obwohl ich noch ein Nicht-Null-Byte sehen muss.Ist MemoryMappedFile.CreateNew (...) garantiert eine Datei mit Nullen zu erstellen?

Gibt es irgendwelche Dokumentation zu diesem Thema, die ich verpasst habe, oder ist es einfach eine Tatsache, dass Memory-Mapped-Dateien bei der Erstellung leer sind?

Antwort

1

Nein, dies ist nicht garantiert. Dies scheint implementierungsspezifisch zu sein.

Obwohl dies nicht in MemoryMappedFile erwähnt wird, dokumentiert das Verhalten der zugrunde liegenden nativen API, die in .NET ordnungsgemäß verwendet wird (CreateFileMapping), dies explizit und hängt von der Quelle des Speichers ab.

Im Falle einer Datei-backed-Mapping:

Wenn die Datei erweitert wird, werden die Inhalte der Datei zwischen dem alten Ende der Datei und das neue Ende der Datei nicht garantiert sei null; Das Verhalten wird vom Dateisystem definiert.

Und im Falle eines anonymen Mapping (unterstützt von Auslagerungsdatei):

Der ursprüngliche Inhalt der Seiten in einem Objekt-Dateizuordnung von das Betriebssystem Auslagerungsdatei sind 0 (Null gesichert).

+0

Haben Sie einen Quelllink, würde ich gerne näher auf die Besonderheiten eingehen. – LaFleur

+1

Microsoft kann keine Versprechen über das Dateisystem abgeben, es liegt nicht in seiner Kontrolle. Es gibt jedoch keine gebräuchliche Verwendung, die keine Nullen erzeugt. –

+0

@LaFleur http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537.aspx –

Verwandte Themen