2015-06-08 39 views
5

Come dice il titolo; Posso fare affidamento su MemoryMappedFile per creare sempre un file pieno di zeri? Ho provato leggendo alcuni file appena creati ma questo "test" sembra inutile, anche se devo ancora vedere un byte diverso da zero.MemoryMappedFile.CreateNew (...) è garantito per creare un file con zero?

C'è qualche documentazione su ciò che ho perso, o è semplicemente un dato che i file mappati in memoria sono vuoti durante la creazione.

risposta

1

No, questo non è garantito. Questo sembra essere specifico per l'implementazione.

Sebbene non menzionato in MemoryMappedFile, il comportamento dell'API nativa sottostante che utilizza in .NET corretto (CreateFileMapping) lo documenta esplicitamente e differisce a seconda dell'origine della memoria.

Nel caso di una mappatura di file-backed:

Se il file viene esteso, il contenuto del file tra il vecchio fine del file e la nuova fine del file non sono garantiti per essere zero; il comportamento è definito dal file system.

E nel caso di una mappatura anonimo (sostenuta da file di paging):

I contenuti iniziali delle pagine in un oggetto di file di mapping supportato dal il file di paging del sistema operativo sono 0 (zero).

+0

Avete un collegamento sorgente, mi piacerebbe guardare più da vicino le specifiche. – LaFleur

+1

Microsoft non può fare promesse sul file system, non è nel loro controllo. Tuttavia, non vi è alcun uso comune che non generi zeri. –

+0

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