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

2019-09-18 09:22发布

什么,如果有任何的性能(或其他)创建一个新的.NET的影响ResourceManager对每个请求new ResourceManger(myResourceType.FullName, myResourceType.Assembly)在了.Designer.cs VS使用“缓存ResourceManager的实例”生成的类( MyResourceType.ResourceManager )?

我使用的.resx文件ASP.NET MVC 3应用程序的环境中工作。

编辑:我很感兴趣,超出成本,为新对象分配内存的影响。

编辑:看MSDN文档ResourceManager.ReleaseAllResources ,它指出:

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.

这似乎意味着,资源集的初始开启是昂贵的,这表明,我认为每一个请求创建一个新的经理可能是昂贵的。 但是,该文档不建议对于资源管理器的寿命/范围的最佳实践。

Answer 1:

我没有使用缓存管理器(我用反射来查找每个资源类型的静态缓存管理器),并使用每个键进入一个新的管理器之间的差异的一些原始分析(使用MiniProfiler)。 结果表明,新的经理花了大约45倍长,这表明,我认为有一个真正的性能优势,以使用缓存管理器的方法。 然而,这两种方法都是如此之快,可能差别没多大关系在实践中。



Answer 2:

当创建它,你将有一个对象的分配。

这意味着你将有一遍遍创建对象性能和内存的影响。

你可以尝试,并检查了多少垃圾回收周期你(使用性能计数器)与其中创建一次(每个进程),并为此在“缓存”资源管理器实例的数量有没有不必要的分配



文章来源: Should I use the static cached ResourceManager or a new instance for each web request? Does it matter?