Réinitialiser ou Claire .NET MemoryStream
L' .NET MemoryStream ne semble pas avoir une .Réinitialiser ou .Méthode claire.
Je pensais de l'aide du code suivant pour ce faire:
ms.Seek(0, IO.SeekOrigin.Begin)
ms.SetLength(0)
Quelle est la bonne façon d'effacer ou réinitialiser un existant .NET MemoryStream?
- Juste pour éclaircir cette question. je pense qu'il se demande quelle méthode empêche la mémoire allouée. En théorie,
SetLength(0)
devrait conserverCapacity
lors de l'attribution d'unnew MemoryStream()
doit libérer cette mémoire et de l'allocation de nouveaux. Selon l'usage, on pourrait le souhaiter pour préserver la mémoire, et juste réinitialiser le flux deLength
etPosition
. (de toute façon, c'est comment une mémoire consciente programmeur C++ pense) - Et les OP du code est bon.
.Capacity
reste après ces instructions, il est donc le meilleur moyen d'éviter un gratuit/alloc lorsqu'il n'est pas nécessaire.
Vous devez vous connecter pour publier un commentaire.
Memorystream n'ont pas de réinitialiser/effacer méthode, car il serait redondant. Par la mise à zéro de la longueur que vous la supprimiez.
Bien sûr, vous pourriez faire:
Ce serait de vous céder un memorystream de la même taille qui est initialisé.
Si vous voulez vraiment effacer manuellement les flux je soupçonne que vous avez recours à une boucle à travers les éléments.
.SetLength(0);
et de conserver la capacité? La mémoire de l'abus dans l'action.Pourquoi avez-vous besoin de réinitialiser la mémoire de flux? Vous pouvez toujours en créer un nouveau. Ou vous pouvez utiliser:
Depuis un MemoryStream est essentiellement un tableau d'octets avec un indice (et quelques autres membres de soutien) de compensation du tableau d'octets, et la réinitialisation de l'indice peut être considéré comme la réinitialisation et la compensation de la MemoryStream. Si l'état initial d'un MemoryStream est une remise à zéro de tableau avec une position zéro puis un exemple d'un MemoryStream reset peut être:
Il est incorrect de dire que MemoryStream.SetLength seul réinitialise ou efface le MemoryStream depuis SetLength n'efface la mémoire tampon interne de la matrice de si la longueur dépasse le tampon courant de la longueur.
Réinitialisation d'un MemoryStream est une approche valable, mais de moins en moins efficace. Un des avantages de la réinitialisation de l'MemoryStream devrait être de garantir que le flux n'a jamais été fermé. Une fois le MemoryStream est fermé, il ne peut plus être changé. Si vous pouvez vous assurer que le MemoryStream instance n'est pas fermée, alors la compensation de la mémoire tampon peut être le chemin à parcourir.
source.GetBuffer()
: MemoryStream buffer interne ne peut pas être accédé. sed: pourquoi expliquée ici: stackoverflow.com/a/1646219/44217