2011-12-29 37 views
18

Tôi có nên cấp phát bộ nhớ hoặc chỉ đối tượng của luồng bộ nhớ: Điều này có ổn không?Lưu bitmap vào MemoryStream

MemoryStream memoryStream = new MemoryStream(); 
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); 

Nếu tôi cần xác định kích thước MemoryStream, làm thế nào tôi có thể lấy nó từ Bitmap?

+3

Điều này sẽ ổn thôi; bạn có gặp vấn đề cụ thể không? –

Trả lời

12

.NET là một môi trường được quản lý: đặc biệt, việc cấp phát bộ nhớ thường được quản lý thay mặt bạn bởi thời gian chạy .NET. Bạn thường không cần phải tự cấp phát bộ nhớ.

Đôi khi, bạn cần phải thông báo thời gian chạy khi bạn đã hoàn thành bộ nhớ bằng cách sử dụng Close() hoặc Dispose(). Câu lệnh using có thể được sử dụng để bao bọc một tài nguyên chẳng hạn như MemoryStream để cho biết thời gian chạy mà bộ nhớ có thể được khai hoang.

+0

Cảm ơn, Bây giờ tôi nghĩ rõ ràng. Tôi đã lên kế hoạch lưu luồng trong lớp học của mình trong khi làm việc, nhưng có vẻ như tôi chỉ nên lưu nó trong quá trình và không giữ nó mọi lúc mà ứng dụng của tôi đang hoạt động. Tôi nghĩ tốt hơn là lưu ảnh dưới dạng bộ nhớ thay vì Bitmap. – Joseph

6

Bạn không cần phải cấp phát lại bộ nhớ.

Bạn có thể nhận kích thước sau đó với memoryStream.Length.


Sau khi bạn đã thực hiện những gì bạn cần với memoryStream của bạn, hãy chắc chắn để xử lý nó (hoặc quấn nó tất cả trong một tuyên bố using).

+0

Cảm ơn, Bây giờ tôi nghĩ rằng nó rõ ràng. Tôi đã lên kế hoạch lưu luồng trong lớp học của mình trong khi làm việc, nhưng có vẻ như tôi chỉ nên lưu nó trong quá trình và không giữ nó mọi lúc mà ứng dụng của tôi đang hoạt động. Tôi nghĩ tốt hơn là lưu ảnh dưới dạng bộ nhớ thay vì Bitmap. – Joseph