2011-01-24 39 views
6

Tôi có một trang web nơi một số người dùng có thể tải lên dll của mình. Tôi cần tạo một thể hiện từ dll này và gọi một phương thức cụ thể. Hơn nữa, tôi cần phải làm điều đó với một số dll trong quá trình 1, vì vậy nó không phải là một lựa chọn cho tôi để sử dụng System.Diagnostics.Process.Cách xác định mức sử dụng bộ nhớ trong ứng dụng .NET của tôi

Có cách nào để xác định dung lượng bộ nhớ mà phương thức này gọi hoặc sử dụng trong thời gian chạy ứng dụng của tôi không? Cảm ơn trước sự giúp đỡ nào

+0

BTW, nếu một trong số chúng tôi trả lời câu hỏi của bạn, bạn có thể vui lòng chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm bên cạnh câu hỏi. Cảm ơn – Basic

Trả lời

7

Sử dụng bộ nhớ trong Net là rất khó khăn để đánh giá - Nó sẽ phụ thuộc vào rất nhiều yếu tố như việc chạy thu gom rác thải, bao nhiêu của khuôn khổ này đã được tải vv

Bạn có thể xem mức sử dụng bộ nhớ theo cấp độ xử lý bằng cách sử dụng performance counters

Giả sử một thời điểm bạn đã xem xét tác động bảo mật khi chạy mã người dùng trong môi trường bán đáng tin cậy, bạn cần sử dụng AppDomain để tải DLL - Bằng cách đó, nó có thể được dỡ bỏ mà không cần khởi động lại toàn bộ trang web/nhóm công nhân

+0

Cảm ơn bạn rất nhiều vì đã trả lời. Tôi sẽ cố gắng giải thích chính xác hơn những gì tôi cần. :) Dự án của tôi là trò chơi dành cho nhà phát triển, nơi họ cần tải lên mã của họ và "chiến đấu" với nhau. Vì vậy, sau khi có một số dll được tải lên, chúng tôi có thể tạo vòng để xác định ai thắng :). Tôi đã nghĩ về việc tạo vòng này trong một quy trình riêng biệt và trong quá trình này, tôi sẽ tạo các cá thể và các phương thức gọi từ các tệp được tải lên. Và tôi cần giới hạn mức sử dụng bộ nhớ cho các trường hợp này, vì vậy nếu nhà phát triển hết hạn mức này - anh ta sẽ mất vòng. – Andrey

+1

Ah, giờ tôi hiểu rồi. Quá trình riêng biệt chắc chắn là bắt buộc - Bạn thậm chí có thể xem xét một quy trình cho mỗi dll tùy thuộc vào số lượng bạn mong muốn lưu trữ cùng một lúc - Bằng cách đó bạn vẫn có thể theo dõi mức sử dụng bộ nhớ bằng cách sử dụng bộ đếm hiệu suất. – Basic

+0

Một tùy chọn khác là để lộ một "heap" ala 'Byte()' hoặc một chút thông minh hơn ('Dictionary'?) Cho các nhà phát triển của bạn mà họ phải sử dụng cho tất cả các biến - bạn có thể kiểm soát' Byte() 'một cách rõ ràng và sử dụng sự phản chiếu để đảm bảo chúng không phân bổ bộ nhớ bên trong các assembly của chúng. – Basic

5

Nếu bạn sử dụng .NET 4.0 có một cái nhìn tại MemoryFailPoint.

Một đề xuất khác: .NET 4.0 hiện cung cấp cơ sở để giám sát mức tiêu thụ bộ nhớ của một AppDomain (AppDomain.MonitoringIsEnabled Property). Ví dụ, bạn có thể sử dụng AppDomain chính để thăm dò ý kiến ​​và phá bỏ một AppDomain, nếu nó sử dụng quá nhiều bộ nhớ.

Các vấn đề liên quan