2012-03-26 43 views
7

tôi có mã như thế này:XPathDocument có sử dụng luồng bộ nhớ được xây dựng sau khi xây dựng không?

// 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); 

tôi nhận ra rằng tôi không dọn dẹp MemoryStream bất cứ nơi nào. Tôi chỉ sẽ thay đổi nó như thế này:

// 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); 
} 

Nhưng tôi không chắc chắn nếu XPathDocument sử dụng MemoryStream nội bộ sau khi xây dựng. (Nếu vậy, tôi sẽ cần phải đợi và vứt bỏ nó sau khi tất cả được thực hiện với số XPathDocument.)

Có ai biết khi nào tôi có thể vứt bỏ số MemoryStream này không?

Trả lời

8

Không có thay đổi tốt. Khi luồng được tải vào xml, bạn không cần nó nữa.

Tôi hy vọng nó tốt, nó khá giống với nhiều mã tôi đã viết. : D

4

Toàn bộ Luồng được đọc và tải và vì vậy có, bạn có thể Vứt bỏ MemoryStream theo cách này.

Mặt khác, một MemoryStream không thực sự cần phải được xử lý, đó là tổng quát hơn. Nếu đó là một FileStream hoặc NetworkStream thì using sẽ rất quan trọng.

+0

Hmm, chỉ là một thói quen tốt thực sự và rất nhiều thứ chúng tôi viết, không xuất phát từ luồng dòng FileStream ora. Sử dụng sử dụng bây giờ là tự động cho tôi trong .net, như Try Cuối cùng là trong Delphi. Nó sẽ không làm tổn thương bất cứ nơi nào gần như nhiều như quên để xử lý một cái gì đó bạn nên có là cách chúng ta nhìn vào nó. –

1

Nếu bạn đang sử dụng bộ nhớ bằng cách sử dụng khối, thì tốt hơn là giới hạn phạm vi của biến cho khối sử dụng, theo cách đó bạn có thể chắc chắn nó sẽ không được sử dụng bên ngoài nó, như sau:

using (var memorystream = new MemoryStream(bytes)) 
{ 
    xPathDocument = new XPathDocument(memoryStream); 
} 
Các vấn đề liên quan