2011-01-24 17 views
6

Tengo un sitio web donde algunos usuarios pueden cargar su dll. Necesito crear una instancia desde este dll y llamar a un método específico. Además, necesito hacerlo con varios dll en 1 proceso, por lo que no es una opción para mí usar System.Diagnostics.Process.Cómo determinar el uso de memoria en mi aplicación .NET

¿Hay alguna forma de determinar la cantidad de memoria que usa este método o limitarla en el tiempo de ejecución de la aplicación? Gracias de antemano por cualquier ayuda

+0

Por cierto, si alguno de nosotros responde su pregunta, puede aceptar la respuesta haciendo clic en la marca al lado de la pregunta. Gracias – Basic

Respuesta

7

uso de memoria en .NET es muy difícil de calibrar - Dependerá de muchos factores tales como si ejecución de obtención de basura, qué parte de la estructura se ha cargado, etc.

usted puede mirar en el uso de memoria en un nivel por proceso usando performance counters

Suponiendo por un momento que ya ha considerado las implicaciones de seguridad de la ejecución de un código de usuarios en un entorno de confianza parcial, es necesario utilizar un AppDomain a cargue la DLL - De esta forma se puede descargar sin reiniciar todo el conjunto de sitio web/trabajador

+0

Muchas gracias por su respuesta. Trataré de explicar con más precisión qué es lo que necesito. :) Mi proyecto es un juego para desarrolladores, donde necesitan cargar su código y "pelear" uno contra el otro. Entonces, después de que hay algunos dlls cargados, podemos crear una ronda para determinar quién gana :). Pensé en crear esta ronda en un proceso separado, y en este proceso iba a crear instancias y llamar a métodos desde dlls cargados. Y necesito limitar el uso de memoria para estas instancias, por lo que si el desarrollador se queda sin este límite, pierde la ronda. – Andrey

+1

Ah, ahora lo entiendo. Se requiere un proceso independiente: incluso podría considerar un proceso por cada dll dependiendo de la cantidad que espere alojar al mismo tiempo. De esa manera, aún puede monitorear el uso de la memoria utilizando contadores de rendimiento. – Basic

+0

Otra opción sería exponer un ala "montón" 'Byte()' o algo un poco más inteligente ('Diccionario'?) A sus desarrolladores que deben usar para todas las variables; a continuación, puede controlar el' Byte() 'explícitamente y use la reflexión para asegurarse de que no están asignando memoria dentro de sus ensamblajes. – Basic

5

Si utiliza .NET 4.0 echar un vistazo a MemoryFailPoint.

Otra sugerencia: .NET 4.0 ahora ofrece instalaciones para supervisar el consumo de memoria de un Dominio de aplicación (AppDomain.MonitoringIsEnabled Property). Por ejemplo, puede usar el dominio de aplicación principal para sondear y derribar un dominio de aplicación, si usa demasiada memoria.

Cuestiones relacionadas