【C#/.NET】使用ASP.NET Core对象池


(资料图片仅供参考)

Nuget

Microsoft.Extensions.ObjectPool

使用对象池的好处

减少初始化/资源分配,提高性能。这一条与线程池同理,有些对象的初始化或资源分配耗时长,复用这些对象减少初始化和资源分配。比如:我有一个执行耗时约500毫秒,内存空间 2KB的任务为此创建一个新线程异步执行,而创建线程耗时1秒,内存空间占用1MB则得不偿失。

使用步骤安装Nuget包:Install-Package Microsoft.Extensions.ObjectPool
builder.Services.TryAddSingleton();
使用对象池的第一步是实现IPooledObjectPolicy接口,要告诉对象池如何创建需要复用的对象

IPooledObjectPolicy接口有两个方法,

T Create()负责创建复用对象。

Return负责将复用的对象释放回对象池中。如果不调用Return,表示该对象在对象池被移除。

//对象池框架接口public interface IPooledObjectPolicy where T : notnull{    T Create();    bool Return(T obj);}//我的复用对象的接口实现public class ReuseObjectPolicy : IPooledObjectPolicy{    public ReuseObject Create()    => new(DateTime.Now);    public bool Return(ReuseObject obj)    => true;}
builder.Services.TryAddSingleton(serviceProvider =>{    var provider = serviceProvider.GetRequiredService();    var policy = new ReuseObjectPolicy();    return provider.Create(policy);});
对象使用通过依赖注入获取泛型ObjectPool对象的Get使用,关于泛型ObjectPool的定义如下

T Get()负责获取复用对象。

Return负责将复用的对象释放回对象池中。如果不调用Return,表示该对象在对象池被移除。

public abstract class ObjectPool where T : class{    public abstract T Get();    public abstract void Return(T obj);}
获取ReuseObject复用对象,通过打印的创建事件和计数器可以知道,对象被复用了。而如果不调用Return,则会重新创建新的对象。
public class ReuseObject {    private static  int _counter = 0;    public ReuseObject(DateTime time)    {        Time = time;        Interlocked.Increment(ref _counter);        Console.WriteLine($"{Time}被创建了{_counter}次");    }    public DateTime Time { get; set; }}public class ObjectPoolController : ControllerBase{    private readonly ReuseObject _reuseObject;    public ObjectPoolController(ObjectPool objectPool)    {        _reuseObject = objectPool.Get();    }    [HttpGet]    public IActionResult Get()    {        var reuseObject = _objectPool.Get();        try        {            Console.WriteLine($"创建时间是:{reuseObject.Time}");        }        finally        {            _objectPool.Return(reuseObject);        }        return Ok();    }}

标签:

最近更新

【C#/.NET】使用ASP.NET Core对象池
2023-05-28 15:40:05
于和伟蹦迪是什么电视剧-于和伟蹦迪是什么梗-快资讯
2023-05-28 14:33:11
世界观焦点:qq农场为什么不能偷菜_qq农场自动偷菜
2023-05-28 14:03:59
中关村发展集团与北京航空航天大学 签约共建未来产业科技园-全球热头条
2023-05-28 12:39:32
数字2代表什么意思_数字2的意思简介_天天热点评
2023-05-28 11:46:19
当前热讯:白家庄小学开展2023劳动教育成果汇报特别行动 让学生们爱上劳动
2023-05-28 10:46:42
二十四个季节的绘画(二十四个季节) 环球速讯
2023-05-28 10:14:57
南京又一次“松绑”限购 将影响几何?-世界快资讯
2023-05-28 09:01:19
核电产业暖春归来:新项目核准重回正轨 制造订单再现高峰
2023-05-28 07:48:32
天天信息:真爱如血第一季_真爱如血哪一季尺度大
2023-05-28 06:53:46
为什么动物都有发情期,而人类却一年四季都可以交配? 全球报资讯
2023-05-28 05:36:44
武极电脑多价位主机推荐
2023-05-28 04:44:51
世界微头条丨山东医专临沂校区官网电话_山东医专临沂校区官网
2023-05-28 02:04:56
《战地2042》精英版现身PlayStation商店 售价100美元 最新消息
2023-05-28 01:12:06
来吧 展示!粮油“体检”的十八般武艺-全球即时看
2023-05-27 23:05:02
A股:海外大事突发!但我们大局已定,等待百点连阳!_全球热议
2023-05-27 21:37:06
长得胖胖的水果是什么?
2023-05-27 20:53:24
当前播报:大学生复活节篮子创意_13岁男生生日礼物送什么好一点
2023-05-27 19:20:38
cad比例怎么调1:100_cad如何调整图纸比例 消息
2023-05-27 19:04:29
入围全国群星奖音乐作品《博巴森根》 即将亮相四川大剧院
2023-05-27 17:17:09
世界快报:芒果是热性还是凉性(芒果是热性还是凉性水果)
2023-05-27 16:33:19
2023中关村论坛开幕式上 10项重大科技成果发布
2023-05-27 15:32:37
环球报道:典雅的近义词_典雅的近义词有哪些
2023-05-27 14:43:13
只有救楼市才能救内需?石述思:房地产市场软着陆是最科学的选择-世界新要闻
2023-05-27 14:22:08
9 岁儿童睡衣派对创意_第一次见面送女生什么礼物好相亲
2023-05-27 12:23:58
焦点热门:老白干酒一季度净利润同比下降超61% 业绩说明会被追问成品酒库存持续增加等问题
2023-05-27 11:26:43
“大象”难“起舞” !-每日热议
2023-05-27 11:05:52
新消息丨南沙区气象台发布高温黄色预警【III级/较重】【2023-05-27】
2023-05-27 10:44:48
第76届戛纳国际电影节昆汀做客, 透露最后一部导演新作计划
2023-05-27 09:33:09
大国民脱口秀你好
2023-05-27 08:13:09