You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft.Extensions.ObjectPool为何未生效?归还对象后内部列表无数据

为什么归还对象后在ObjectPool的内部_items列表里看不到?

环境与代码

使用Microsoft.Extensions.ObjectPool v7.0.11版本,在LINQPad v7.7.15中运行以下C#代码:

var pool = ObjectPool.Create<object>();
var thing = pool.Get();
pool.Return(thing);
pool.Uncapsulate()._items.Dump();

运行结果

ObjectWrapper<Object>[47] = { null, null, null, null, null, null, ... }

原因说明

  • 默认的DefaultObjectPool<T>实现逻辑里,归还对象时不会直接存入_items数组。它会先把对象暂存到线程本地的栈中,只有当这个栈被填满(默认容量为20),才会将栈内的对象批量转移到_items数组里。
  • 你只归还了一个对象,这个对象还留在线程本地栈中,没触发批量转移到_items的逻辑,所以直接查看_items数组自然找不到它。
  • 若要验证这个机制,可以多归还几十个对象(比如超过20个),此时再查看_items数组,就能看到已归还的对象了。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:04