Использует ли XPathDocument поток памяти, с которым он построен после создания? - PullRequest
7 голосов
/ 26 марта 2012

У меня есть такой код:

// Take the xml message and turn it into an object
var bytes = Encoding.ASCII.GetBytes(message);
var memoryStream = new MemoryStream(bytes);

XPathDocument xPathDocument = new XPathDocument(memoryStream);

Я понял, что нигде не убираю MemoryStream.Я просто собирался изменить это на это:

// Take the xml message and turn it into an object
var bytes = Encoding.ASCII.GetBytes(message);
var memoryStream = new MemoryStream(bytes);

XPathDocument xPathDocument;
using(memoryStream)
{
    xPathDocument = new XPathDocument(memoryStream);
}

Но я не был уверен, если XPathDocument использует MemoryStream внутри после строительства.(Если это так, мне нужно будет подождать и утилизировать его после того, как я все сделаю с XPathDocument.)

Кто-нибудь знает, когда я могу избавиться от этого MemoryStream?

Ответы [ 3 ]

8 голосов
/ 26 марта 2012

Нет, это хорошее изменение. Как только поток загружен в xml, он вам больше не нужен.

Ну, я надеюсь, что это хорошо, это удивительно похоже на большую часть кода, который я написал. : D

4 голосов
/ 26 марта 2012

Весь поток читается и загружается, и поэтому да, вы можете утилизировать MemoryStream таким образом.

С другой стороны, MemoryStream на самом деле не нужно утилизировать, это скорее общий принцип. Если бы это был FileStream или NetworkStream, using был бы критическим.

1 голос
/ 03 апреля 2015

Если вы все равно используете поток памяти с использованием блока, лучше ограничить область действия переменной блоком использования, так что вы можете быть уверены, что он не будет использоваться вне его, например:

using (var memorystream = new MemoryStream(bytes))
{
    xPathDocument = new XPathDocument(memoryStream);
}
...