Modifier l'encodage UTF-8 sur un flux (MemoryMappedViewStream)

Je suis en utilisant le code ci-dessous pour lire un ~2,5 Go fichier Xml aussi vite que je le peux (grâce à MemoryMappedFile). Cependant, je suis l'exception suivante: "'.', valeur hexadécimale 0x00, est un caractère non valide. Ligne 9778, la position 73249406.". Je crois qu'il est dû à des problème d'encodage. Comment faire en sorte que le MemoryMappedViewStream lit le fichier en UTF-8?

static void Main(string[] args)
{
    using (var file = MemoryMappedFile.CreateFromFile(@"d:\temp\temp.xml", FileMode.Open, "MyMemMapFile"))
    {
        using (MemoryMappedViewStream stream = file.CreateViewStream())
        {
            Read(stream);
        }
    }
}

static void Read(Stream stream)
{
    using (XmlReader reader = XmlReader.Create(stream))
    {
        reader.MoveToContent();

        while (reader.Read())
        {
        }
     }
 }
Non, c'est parce que vous avez exécuté à la fin de la cartographie. Vous pouvez seulement espérer être à la carte le plein de 2,5 giga-octets sur un système d'exploitation 64 bits. Ce code n'est pas accomplir quoi que ce soit, vous êtes de fait, il est plus lent en copiant les données deux fois. D'abord le cache du système de fichiers, de nouveau à la vue. Les fichiers mappés en mémoire ne sont utiles que si vous lisez les mêmes données à plusieurs reprises. Vous n'avez pas.

OriginalL'auteur Martin | 2011-08-19