我应该为每个Web请求使用静态缓存的ResourceManager还是新实例?有关系吗?

时间:2012-06-22 16:24:53

标签: c# asp.net-mvc static resx resourcemanager

使用ResourceManager的每个请求与使用生成的.Designer.cs中的“缓存的ResourceManager实例”创建新的.NET new ResourceManger(myResourceType.FullName, myResourceType.Assembly)的性能(或其他)含义是什么? class(MyResourceType.ResourceManager)?

我在使用.resx文件的ASP.NET MVC 3应用程序的上下文中工作。

编辑:我对新对象的成本分配内存以外的影响感兴趣。

编辑:查看ResourceManager.ReleaseAllResources的MSDN文档,它声明:

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.

这似乎意味着资源集的初始开放是昂贵的,这表明在每个请求上创建新经理可能很昂贵。但是,文档并未提出有关资源管理器生命周期/范围的最佳实践。

2 个答案:

答案 0 :(得分:4)

我做了一些原始的分析(使用MiniProfiler),使用缓存管理器(我使用反射来查找每种资源类型的静态缓存管理器)和为每个密钥访问使用新管理器之间的区别。结果表明,新经理花了大约45倍的时间,这表明使用缓存管理器方法有一个真正的性能优势。然而,这两种方法都是如此之快,以至于差异在实践中可能并不重要。

答案 1 :(得分:0)

创建对象时,您将分配一个对象。

这意味着您将一遍又一遍地创建对象,从而产生性能和内存影响。

您可以尝试并检查您拥有的垃圾收集周期数(使用性能计数器)与创建一次(每个进程)的“缓存”资源管理器实例的数量,因此没有不必要的分配