国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了【C#/.NET】使用ASP.NET Core對象池。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Nuget

Microsoft.Extensions.ObjectPool

?文章來源地址http://www.zghlxwxcb.cn/news/detail-462168.html

使用對象池的好處

減少初始化/資源分配,提高性能。這一條與線程池同理,有些對象的初始化或資源分配耗時長,復(fù)用這些對象減少初始化和資源分配。比如:我有一個執(zhí)行耗時約500毫秒,內(nèi)存空間 2KB的任務(wù)為此創(chuàng)建一個新線程異步執(zhí)行,而創(chuàng)建線程耗時1秒,內(nèi)存空間占用1MB則得不償失。

?

使用步驟

安裝Nuget包:Install-Package Microsoft.Extensions.ObjectPool

builder.Services.TryAddSingleton<ObjectPoolProvider, DefaultObjectPoolProvider>();

使用對象池的第一步是實現(xiàn)IPooledObjectPolicy接口,要告訴對象池如何創(chuàng)建需要復(fù)用的對象

IPooledObjectPolicy接口有兩個方法,

T Create()負(fù)責(zé)創(chuàng)建復(fù)用對象。

Return負(fù)責(zé)將復(fù)用的對象釋放回對象池中。如果不調(diào)用Return,表示該對象在對象池被移除。

//對象池框架接口
public interface IPooledObjectPolicy<T> where T : notnull
{
    T Create();
    bool Return(T obj);
}

//我的復(fù)用對象的接口實現(xiàn)
public class ReuseObjectPolicy : IPooledObjectPolicy<ReuseObject>
{
    public ReuseObject Create()
    => new(DateTime.Now);

    public bool Return(ReuseObject obj)
    => true;
}
builder.Services.TryAddSingleton(serviceProvider =>
{
    var provider = serviceProvider.GetRequiredService<ObjectPoolProvider>();
    var policy = new ReuseObjectPolicy();
    return provider.Create(policy);
});

對象使用通過依賴注入獲取泛型ObjectPool對象的Get使用,關(guān)于泛型ObjectPool的定義如下

T Get()負(fù)責(zé)獲取復(fù)用對象。

Return負(fù)責(zé)將復(fù)用的對象釋放回對象池中。如果不調(diào)用Return,表示該對象在對象池被移除。

public abstract class ObjectPool<T> where T : class
{
    public abstract T Get();
    public abstract void Return(T obj);
}

?

獲取ReuseObject復(fù)用對象,通過打印的創(chuàng)建事件和計數(shù)器可以知道,對象被復(fù)用了。而如果不調(diào)用Return,則會重新創(chuàng)建新的對象。

public class ReuseObject 
{
    private static  int _counter = 0;
    public ReuseObject(DateTime time)
    {
        Time = time;
        Interlocked.Increment(ref _counter);

        Console.WriteLine($"{Time}被創(chuàng)建了{(lán)_counter}次");
    }

    public DateTime Time { get; set; }
}

public class ObjectPoolController : ControllerBase
{

    private readonly ObjectPool<ReuseObject> _objectPool;


    public ObjectPoolController(ObjectPool<ReuseObject> objectPool)
    {
      _objectPool = objectPool;
    }

    [HttpGet]
    public IActionResult Get()
    {
        var reuseObject = _objectPool.Get();
        try
        {
            Console.WriteLine($"創(chuàng)建時間是:{reuseObject.Time}");
        }
        finally
        {
            _objectPool.Return(reuseObject);
        }
        return Ok();
    }
}

?

?

?

到了這里,關(guān)于【C#/.NET】使用ASP.NET Core對象池的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET CORE API 使用Orleans

    ASP.NET CORE API 使用Orleans

    快速使用Monimal API 快速集成Orleans 微軟官網(wǎng)地址如下: https://learn.microsoft.com/zh-cn/dotnet/orleans/quickstarts/build-your-first-orleans-app?source=recommendationstabs=visual-studio 當(dāng)然它的存儲grain存儲采用的是內(nèi)存級別存儲,我緩存了mssql 存儲。如果是內(nèi)存存儲使用如下代碼就Ok 我采用的是數(shù)據(jù)庫存

    2024年02月06日
    瀏覽(23)
  • 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完結(jié)篇)

    聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完結(jié)篇)

    還是先上代碼, 這是基礎(chǔ)版本我們要達(dá)成的目標(biāo),僅需定義一個特性即可完成攔截的目標(biāo) 如上是我們定義的攔截器基類,我們想要達(dá)到的目標(biāo)是,只要繼承該基類,并覆寫InterceptAsync 方法即可實現(xiàn)具有特定功能的攔截類,而容器會自動代理到該攔截類,實現(xiàn)攔截。 這里要感

    2024年02月02日
    瀏覽(20)
  • ASP.NET Core使用Hangfire定時發(fā)布文章

    ASP.NET Core使用Hangfire定時發(fā)布文章

    也是上了5天班,終于迎來了休息,抽空更新下博客,然后就是下周一公司會對我進(jìn)行考核,希望考核能通過吧?。。?然后我想給博客添加一個定時發(fā)布文章的功能,其實這個功能對于我的博客是沒什么作用的,什么時候發(fā)都沒什么人看。但是咱還是要有這個功能。 我為文章

    2024年02月08日
    瀏覽(16)
  • 聊一聊為什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core

    聊一聊為什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core

    如果用到動態(tài)代理,大家可能會有幾種選擇,排到前列的是Autofac+Castle、AspectCore和DoraInterception, 我將從我當(dāng)時研究的經(jīng)歷,以及我遇到的場景,為大家展示下 聊一聊我為什么要費(fèi)時費(fèi)力的整合Microsoft.Extensions.DependencyInjection和Castle.Core 直接上源碼 如上所示的接口定義了一個事

    2024年02月01日
    瀏覽(20)
  • ASP.NET Core MVC 使用 JWT 的示例

    創(chuàng)建一個 ASP.NET Core MVC 項目。 添加 NuGet 包: Microsoft.AspNetCore.Authentication.JwtBearer:用于支持 JWT 的身份驗證。 System.IdentityModel.Tokens.Jwt:用于生成和驗證 JWT。 在 Startup.cs 文件中做如下修改: 請注意,在上述代碼中,您需要將以下參數(shù)替換為實際的值: \\\"your_issuer\\\" :發(fā)行者的標(biāo)

    2024年02月13日
    瀏覽(25)
  • ASP.NET Core Web API入門之三:使用EF Core

    ASP.NET Core Web API入門之三:使用EF Core

    一般來講我們做項目都會用實體類跟數(shù)據(jù)庫實體進(jìn)行關(guān)系對應(yīng),這樣的好處方便我們維護(hù)、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯的ORM框架。 1、跨數(shù)據(jù)庫支持能力強(qiáng)大,只需修改配置就可以輕松實現(xiàn)數(shù)據(jù)庫切換。 2、提升了開發(fā)效

    2024年02月10日
    瀏覽(22)
  • .NET服務(wù)發(fā)現(xiàn)(Microsoft.Extensions.ServiceDiscovery)集成Consul

    .NET服務(wù)發(fā)現(xiàn)(Microsoft.Extensions.ServiceDiscovery)集成Consul

    隨著Aspire發(fā)布preview5的發(fā)布,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務(wù)注冊發(fā)現(xiàn)這個屬于老掉牙的話題解決什么問題就不贅述了,這里主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何擴(kuò)展其他的中間件的發(fā)現(xiàn)集成 . Microsoft.Extensions.ServiceDiscovery官方默認(rèn)提供的Config,DNS,YAR

    2024年04月11日
    瀏覽(17)
  • ASP.NET Core 中使用 WebSocket 協(xié)議進(jìn)行實時通信

    介紹 在 ASP.NET Core 中使用 WebSocket 協(xié)議創(chuàng)建實時通信的完整示例涉及幾個步驟。在此示例中,我們將創(chuàng)建一個簡單的聊天應(yīng)用程序,用戶可以在其中實時發(fā)送和接收消息。此示例假設(shè)您對 ASP.NET Core 和 C# 有基本了解。 步驟1.創(chuàng)建一個新的ASP.NET Core項目 首先,使用 Visual Studio 或

    2024年01月25日
    瀏覽(28)
  • 【ASP.NET Core】使用SignalR推送服務(wù)器日志

    【ASP.NET Core】使用SignalR推送服務(wù)器日志

    一個多月前接手了一個產(chǎn)線機(jī)器人項目,上位機(jī)以讀寫寄存器的方式控制機(jī)器人,服務(wù)器就是用 ASP.NET Core 寫的 Web API。由于前一位開發(fā)者寫的代碼質(zhì)量問題,導(dǎo)致上位機(jī)需要16秒才能啟動。經(jīng)過我近一個月的改造,除了保留業(yè)務(wù)邏輯代碼,其他的基本重寫。如今上位機(jī)的啟動

    2024年02月03日
    瀏覽(23)
  • 使用任務(wù)計劃開機(jī)啟動ASP.NET Core應(yīng)用程序

    使用任務(wù)計劃開機(jī)啟動ASP.NET Core應(yīng)用程序

    ASP.NET Core應(yīng)用程序現(xiàn)在是一個控制臺應(yīng)用程序,在Windows上直接雙擊啟動,但如果想讓開發(fā)完成的ASP.NET Core應(yīng)用程序開機(jī)啟動,可以將ASP.NET Core應(yīng)用程序修改成Windows服務(wù)運(yùn)行,但這需要額外添加代碼,也可以使用IIS來托管ASP.NET Core應(yīng)用程序,但可能需要安裝一些支持IIS的組件

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包