Question

Je considérais en utilisant UnmanagedMemoryStream plutôt que MemoryStream pour traiter les paquets entrants (et peut-être sortants?) dans un serveur de réseau. Ce que je souhaite obtenir moins la copie des valeurs, et si possible, éviter de copier sur le tas (trop).

Par exemple, pour un paquet entrant, on pourrait faire:

fixed (byte* p = &data) // where data comes from a socket receive
{
    using (var stream = new UnmanagedMemoryStream(p, data.Length))
    {
        // do handling here...
    }
}

Pourtant, je ne suis pas tout à fait sûr s'il n'y a aucun avantage réaliste à faire cela. Quelqu'un pourrait-il venir avec des commentaires pour savoir s'il y aurait une valeur ou non en faisant cela, plutôt que d'utiliser le bon vieux géré MemoryStream?

Merci à l'avance.

Était-ce utile?

La solution

Non, vous ne l'avez pas amélioré ce qui est déjà là. Un byte [] est un type de référence. Vous pouvez tout simplement passer au constructeur MemoryStream (byte []) et pas de données se copier. MS stocke simplement une référence au même tableau.

En fait, vous l'avez fait pire parce que vous épinglé le tableau. Obtenir une collecte des ordures à courir à l'intérieur du corps de votre extrait n'est pas improbable, vous lisez des choses du tableau et créez probablement des objets à partir des données, des chaînes et ce, non. Les besoins garbage collector pour travailler autour du réseau épinglé, ce qui rend sa vie beaucoup plus difficile. Cela peut réellement affecter la perf de votre programme pendant un certain temps, le compactage du tas est important de rendre le cache du processeur efficace.

Autres conseils

Cela ressemble à une optimisation trop tôt pour moi. Avez-vous utilisé MemoryStream et fait un certain profilage pour montrer qu'il vous a causé tangible, des problèmes de performance mesurables?

Je collerait avec le MemoryStream conventionnel et me sauver le mal de tête jusqu'à ce qu'il devienne évident (par profilage) qu'il était nécessaire de changer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top