什么是ObjectPoolProvider?为什么默认情况下asp.net核心IServiceCollection注入了此值

时间:2019-05-03 12:11:21

标签: asp.net-core servicecollection

我注意到,在设置新的asp.net核心应用程序时,ServiceCollection默认情况下由框架注入了Microsoft.Extensions.ObjectPool.ObjectPoolProvider。为什么会这样,更重要的是我们应该何时使用它以及如何使用。

对此进行Google搜索不会产生任何结果,我在docs.microsoft.com上可以找到的文档只是描述了类型,而没有其他内容。

1 个答案:

答案 0 :(得分:1)

对象池通常用于减少创建/初始化对象的新实例(例如数据库连接池)的开销,或减少释放资源的影响(例如,最小化垃圾回收或防止堆的内存碎片化)

ObjectPool好像最近在这里有记录:https://docs.microsoft.com/en-us/aspnet/core/performance/objectpool?view=aspnetcore-3.0

以下摘录描述了一个示例用法: ……ASP.NET Core框架在某些地方使用对象池来重用StringBuilder实例。 StringBuilder分配并管理自己的缓冲区来保存字符数据。”

关于您是否默认将其注册到ioc容器中的问题,现在看来它已从net core 3.0的默认值中删除-请参阅以下PR:https://github.com/aspnet/AspNetCore/pull/6437和声明: https://github.com/aspnet/Announcements/issues/336:-)

如果您对实施细节感兴趣,请在以下答案中找到大量信息:C# Object Pooling Pattern implementation