1

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

对此进行谷歌搜索没有结果,我可以在 docs.microsoft.com 上找到的文档仅描述了该类型,没有其他任何内容。

4

1 回答 1

1

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

看起来 ObjectPool 最近已在此处记录:https ://docs.microsoft.com/en-us/aspnet/core/performance/objectpool?view=aspnetcore-3.0

下面是描述一个示例使用的摘录:“...... ASP.NET Core 框架在某些地方使用对象池来重用 StringBuilder 实例。StringBuilder 分配和管理自己的缓冲区来保存字符数据。”</p>

关于您关于默认情况下在 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

于 2019-09-28T22:41:19.973 回答