2012-06-22 8 views
6

¿Cuáles son las implicaciones de rendimiento (u otras) de crear un .NET ResourceManager nuevo en cada solicitud con new ResourceManger(myResourceType.FullName, myResourceType.Assembly) frente a utilizar la "instancia de ResourceManager almacenada en caché" en la clase generada .Designer.cs (MyResourceType.ResourceManager)?¿Debo usar el ResourceManager almacenado en caché estática o una nueva instancia para cada solicitud web? ¿Importa?

Estoy trabajando en el contexto de una aplicación ASP.NET MVC 3 utilizando archivos .resx.

Editar: Estoy interesado en implicaciones más allá del costo de asignación de memoria para el nuevo objeto.

Editar: En cuanto a la documentación de MSDN para ResourceManager.ReleaseAllResources, se establece que:

This method will shrink the working set in a running application. Any future resource lookups on this ResourceManager will be as extensive as the first lookup, since it will need to search and load resources again.

Esto parece implicar que la apertura inicial del conjunto de recursos es caro, lo que me hace pensar que la creación de una nueva gerente en cada solicitud podría ser costoso. Sin embargo, los documentos no sugieren una mejor práctica con respecto al tiempo de vida/alcance de los administradores de recursos.

Respuesta

4

Hice algunos perfiles primitivos (usando MiniProfiler) de la diferencia entre usar un administrador en caché (utilicé la reflexión para encontrar el administrador en caché estático para cada tipo de recurso) y el uso de un nuevo administrador para cada acceso de clave. Los resultados sugirieron que el nuevo gerente tomó aproximadamente 45 veces más tiempo, lo que me sugiere que hay un beneficio real en el rendimiento al usar el enfoque del administrador en caché. Sin embargo, ambos enfoques fueron tan rápidos que la diferencia probablemente no importa mucho en la práctica.

0

Tendrá una asignación de un objeto al crearlo.

eso significa que tendrá un rendimiento y las implicaciones de memoria para crear el objeto una y otra vez.

se puede probar y comprobar la cantidad de basura ciclos de recogida que tiene (el uso de contadores de rendimiento) vs la cantidad de la instancia del gestor de recursos "en caché", que se crean una vez (por proceso) y por lo tanto no hay asignaciones innecesarias

+0

¿Está diciendo que la asignación de objetos es la ÚNICA implicación? Estoy mucho más preocupado con cosas como el almacenamiento en memoria caché de archivos de recursos ... – ChaseMedallion

+0

No lo sé, pero tendrá que consultar con contadores de rendimiento y perfiladores – eyossi

Cuestiones relacionadas