【C#/.NET】使用ASP.NET Core对象池 世界新资讯
(资料图片)
Microsoft.Extensions.ObjectPool
使用对象池的好处减少初始化/资源分配,提高性能。这一条与线程池同理,有些对象的初始化或资源分配耗时长,复用这些对象减少初始化和资源分配。比如:我有一个执行耗时约500毫秒,内存空间 2KB的任务为此创建一个新线程异步执行,而创建线程耗时1秒,内存空间占用1MB则得不偿失。
使用步骤安装Nuget包:Install-Package Microsoft.Extensions.ObjectPoolbuilder.Services.TryAddSingleton使用对象池的第一步是实现IPooledObjectPolicy接口,要告诉对象池如何创建需要复用的对象();
IPooledObjectPolicy接口有两个方法,
T Create()负责创建复用对象。
Return负责将复用的对象释放回对象池中。如果不调用Return,表示该对象在对象池被移除。
//对象池框架接口public interface IPooledObjectPolicywhere 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获取ReuseObject复用对象,通过打印的创建事件和计数器可以知道,对象被复用了。而如果不调用Return,则会重新创建新的对象。where T : class{ public abstract T Get(); public abstract void Return(T obj);}
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 -
每日热议!水性双面胶带 关于水性双面胶带介绍
2023-05-28 -
长沙县泉韵社区:文艺点亮“邻里圈” 让幸福触手可及 世界观点
2023-05-28 -
申万宏源:美联储纪要凸显内部意见分化
2023-05-28 -
环球头条:德普23岁女儿和女友忘情热吻引热议!T恤内搭空气太放飞,可真瘦
2023-05-28 -
利物浦小将吉特将加盟毕尔巴鄂 转会费用仅为100万 环球速看
2023-05-28 -
标本兼治 全民参与 山北社区河道治理造福居民|头条焦点
2023-05-28 -
世界快播:加快创建一流企业 广西国企研发投入强度超全国平均水平
2023-05-28 -
我国“最难”区分的两座城市,名字极其相似,却相距天南海北
2023-05-28 -
宋妍霏登上《精品购物指南》封面,造型清新又甜美,时髦有魅力!
2023-05-28 -
金科股份回复关注函:金科控股不存在忽悠式增持的情形
2023-05-28 -
环球观焦点:入夏的第一条裙子,就穿小白裙!
2023-05-28 -
丰田陆地巡洋舰和霸道的区别在哪_丰田陆地巡洋舰和霸道的区别_快播报
2023-05-28 -
天天热议:南昌一地演出彩排舞台背景屏倒塌,9名幼儿被砸伤,已送医救治
2023-05-28 -
中国—东盟经济关系研讨会在穗举行
2023-05-27 -
笔记本电脑怎样外接显示器(笔记本电脑怎样外接显示器屏幕)
2023-05-27 -
2023年05月27日10时30分欧元/人民币汇率最新报价-当前信息
2023-05-27 -
App推广联盟平台_app推广联盟
2023-05-27 -
世界最新:光耦可控硅工作原理_可控硅工作原理
2023-05-27 -
爆粉是什么意思(爆粉)
2023-05-27 -
大健康产业加速高质量可持续发展 安利承诺2038年实现碳中和 焦点
2023-05-27 -
真石漆寿命一般是多少年|全球速读
2023-05-27 -
全球实时:秘密花园收视率
2023-05-27 -
全球观速讯丨陕西2023养老金上调有最新进展吗?企退涨工资的公布时间确定吗?
2023-05-27 -
杀戮地城2好玩吗 杀戮地城2玩法简介 热资讯
2023-05-27 -
每日讯息!147个名额!杭州又一批事业单位公开招聘,今日开始报名→
2023-05-27 -
黑芝麻1亿元于江西设储能子公司 经营范围含电池制造
2023-05-27 -
环球观热点:综合评价招生(A类高校)考生志愿确认时间公布
2023-05-27 -
过年去哪里旅行比较好_春节去哪旅游比较好
2023-05-27 -
焦点报道:阶段性“减”助电影市场更长远“增”
2023-05-27
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16