Tôi có một đối tượng tĩnh trong thời gian chạy về cơ bản là một danh sách các đối tượng khác (ints, strings, Dictionary, các đối tượng khác, vv). Có cách nào để xác định bộ nhớ được sử dụng bởi đối tượng "danh sách các đối tượng khác" tĩnh của tôi trong thời gian chạy không? Điều này sẽ thuận tiện cho mục đích thiết bị và báo cáo.Dấu chân bộ nhớ của một đối tượng tại Runtime trong .NET là gì?
Trả lời
Có thể bạn đang yêu cầu thứ gì đó mà bạn có thể gọi từ mã của mình (mà tôi cũng muốn biết), nhưng tôi cảm thấy tôi nên đề cập đến Ants profiler [http://www.red-gate.com/Products/ants_profiler/index.htm] trong trường hợp người khác không tìm kiếm thứ gì đó cụ thể. Nó sẽ cho bạn biết tất cả các loại thông tin về mã của bạn trong khi nó thực hiện bao gồm cả bộ nhớ đang được sử dụng bao nhiêu.
Từ trang web của họ ...
Sơ bộ nhớ để hiểu làm thế nào ứng dụng của bạn sử dụng bộ nhớ, và để xác định vị trí rò rỉ bộ nhớ. Bộ nhớ bộ nhớ cho phép bạn chụp nhanh tại bất kỳ điểm nào trong việc thực hiện chương trình của bạn, vì vậy bạn có thể xem bộ nhớ nào là khi sử dụng tại thời điểm đó. Bạn có thể chụp nhiều ảnh chụp nhanh tại các thời điểm khác nhau trong khi ứng dụng của bạn đang chạy, vì vậy bạn có thể so sánh bộ nhớ ứng dụng .
sizeof có thể được sử dụng trên các loại giá trị cũng có Marshal.SizeOf mà có thể được sử dụng với một số gợi ý để NET:
... Nhưng đó không phải là chính xác tổng số chi phí kể từ khi thời gian chạy không phân bổ thêm byte cho các lớp học cho những thứ như khối đồng bộ.
Nếu bạn đang thực sự quan tâm đến việc đo kiểu này mà, tuy nhiên, bạn nên sử dụng các API profiling:
http://msdn.microsoft.com/en-us/library/ms404386.aspx
Hoặc một công cụ miễn phí như windbg có thể làm tất cả các loại điều tuyệt vời.
Không có hồ sơ. Chỉ đủ cho một lớp duy nhất - xem here.
Cảm ơn bạn đã trả lời. Tôi nghĩ rằng kế hoạch tấn công ban đầu của tôi, bởi vì tôi chắc chắn hầu hết các đối tượng sẽ được tuần tự hóa, sẽ giống như sau:
using (MemoryStream memstream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(memstream, myObjectOfObjects);
mem_footprint += memstream.Length;
}
catch
{
// not a serializable object
}
}
- 1. Dấu chân bộ nhớ đối tượng Java - Visualvm và java.sizeOf đo lường
- 2. Dấu chân bộ nhớ của các kiểu dữ liệu Haskell
- 3. Ghi lại dấu chân bộ nhớ trong Linux
- 4. Chi phí bộ nhớ của một DataSet so với các lớp .Net Collection khác là gì?
- 5. Phân tích bộ nhớ đối tượng trong .NET
- 6. Python: Cách ước tính/tính toán dấu chân bộ nhớ của cấu trúc dữ liệu?
- 7. .Net Bộ nhớ trong bộ nhớ đơn giản
- 8. Dumping nội dung bộ nhớ của một đối tượng
- 9. Tcp buffering breakage trong .NET runtime
- 10. Lớp học không có thành viên dữ liệu có dấu chân bộ nhớ trong java không?
- 11. Cách đo dung lượng bộ nhớ mà một đối tượng riêng lẻ có trong .NET
- 12. Dấu chân ứng dụng là gì và cách tính toán?
- 13. Sử dụng bộ nhớ Python: Đối tượng nào của tôi đang chiếm nhiều bộ nhớ nhất?
- 14. Đối tượng PHP nằm trong bộ nhớ
- 15. Điều gì có thể "Ghim" một đối tượng trong bộ nhớ trong Silverlight?
- 16. Bố cục bộ nhớ của một mảng .NET
- 17. Dấu chân bộ nhớ cho các hệ thống lớn trong Vaadin
- 18. Rò rỉ bộ nhớ trong .NET
- 19. Các đối tượng tĩnh trong ASP.NET là một sự lãng phí bộ nhớ?
- 20. .NET Kích thước bộ nhớ
- 21. những gì là tốn kém hơn cho bộ nhớ. "tạo và xóa đối tượng" hoặc "sử dụng lại đối tượng"?
- 22. Bố cục bộ nhớ Đối tượng C++
- 23. Triết lý quản lý bộ nhớ trong C++ là gì?
- 24. Bộ nhớ trong của Android - giới hạn là gì?
- 25. Đối tượng có bộ nhớ thừa kế
- 26. @ trong thuộc tính đối tượng là gì?
- 27. Định dạng nội bộ của Chuỗi .NET là gì?
- 28. Đối tượng được ghim là gì?
- 29. "Bộ nhớ đệm" là gì?
- 30. ABAP: đồng bộ hóa đối tượng bộ nhớ chia sẻ
Tôi thực sự đang tìm kiếm một thực thi có lập trình. Nhưng tôi đồng ý rằng ANTS Profiler chắc chắn có thể tiện dụng trong các tình huống phù hợp :) – Bullines