最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET在VS2022中使用Dispose釋放資源實(shí)例

 更新時(shí)間:2021年11月24日 15:52:47   作者:編程寶庫  
這篇文章介紹了ASP.NET在VS2022中使用Dispose釋放資源實(shí)例,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

DisposeFinalize是運(yùn)行的 .NET 和 .NET Core 應(yīng)用程序釋放占用的資源的兩種方法。通常,如果應(yīng)用程序中有非托管資源,應(yīng)該顯式地釋放這些資源占用的資源。

由于 Finalize的非確定性,以及在性能方面的成本很高,因此 Dispose方法的使用頻率遠(yuǎn)高于 Finalize。其實(shí),我們可以在一個(gè)實(shí)現(xiàn)了 IDisposable接口的類型上使用 Dispose方法。

本文中提供的代碼示例均默認(rèn)運(yùn)行在 Visual Studio 2022。

使用 VS2022 創(chuàng)建 ASP.NET Core 項(xiàng)目

我們?cè)?Visual Studio 2022 中創(chuàng)建一個(gè) ASP.NET Core 項(xiàng)目。按照以下步驟在 Visual Studio 2022 中創(chuàng)建一個(gè)新的 ASP.NET Core Web API 6 項(xiàng)目。

  • 1) 啟動(dòng) Visual Studio 2022 IDE。
  • 2) 單擊 “Create new project”。
  • 3) 在 “Create new project” 窗口中,從顯示的模板列表中選擇 “ASP.NET Core Web API”。
  • 4) 點(diǎn)擊下一步。
  • 5) 在 “Configure your new project” 窗口中,指定新項(xiàng)目的名稱和位置。
  • 6) 根據(jù)您的偏好,可選擇選中 “Place solution and project in the same directory” 復(fù)選框。
  • 7) 點(diǎn)擊下一步。
  • 8) 在接下來顯示的 “Additional Information” 窗口中,從頂部的下拉列表中選擇 .NET 6.0 作為目標(biāo)框架。將 “Authentication Type” 保留為 “None”(默認(rèn))。確保選中 “Use controllers ...” 選項(xiàng)。
  • 9) 確保未選中 “Enable Docker,”、“Configure for HTTPS” 和 “Enable Open API Support” 復(fù)選框,因?yàn)槲覀儾粫?huì)在此處使用任何這些功能。您也可以選擇取消選中 “Use controllers(取消選中以使用最少的 API)” 復(fù)選框,因?yàn)槲覀儗?chuàng)建自己的控制器。
  • 10) 單擊創(chuàng)建。

這將在 Visual Studio 2022 中創(chuàng)建一個(gè)新的 ASP.NET Core 6 Web API 項(xiàng)目。我們將在本文的后續(xù)部分中使用該項(xiàng)目來說明 Dispose的用法。

1. 創(chuàng)建一個(gè)實(shí)現(xiàn) IDisposable 接口的類

我們現(xiàn)在將創(chuàng)建一個(gè)實(shí)現(xiàn) IDisposable接口的類,代碼如下:

public class FileManager: IDisposable {
    FileStream fileStream = new FileStream(@"C:\Test.txt",
    FileMode.Append);
    public async Task Write(string text) {
            byte[] buffer = Encoding.Unicode.GetBytes(text);
            int offset = 0;
            try {
                await fileStream.WriteAsync(buffer, offset,
                buffer.Length);
            }
            catch {
                //Write code here to handle exceptions.
            }
    }
    public void Dispose() {
            if (fileStream != null) {
                fileStream.Dispose();
            }
    }
}

FileManager類實(shí)現(xiàn) IDisposable接口并包含兩個(gè)方法:WriteDispose。前者用于將文本異步寫入文件,后者用于通過調(diào)用 FileStream類的 Dispose方法從內(nèi)存中刪除 FileStream實(shí)例。

下面,我們介紹在 ASP.NET Core 6 中處理 IDisposable對(duì)象的四種方法。

2. 使用 “using” 語句處理 IDisposable 對(duì)象

處理 IDisposable實(shí)例的最簡單方法是使用“using”語句,它會(huì)自動(dòng)調(diào)用實(shí)例上的 Dispose方法。以下代碼片段說明了這一點(diǎn)。

using(FileManager fileManager = new FileManager())
{
        await fileManager.Write("This is a text");
}

3. 在請(qǐng)求結(jié)束時(shí)處理 IDisposable 對(duì)象

在 ASP.NET Core 或 ASP.NET Core MVC 應(yīng)用程序中工作時(shí),我們可能經(jīng)常需要在 HTTP 請(qǐng)求結(jié)束時(shí)處理對(duì)象。

HttpResponse.RegisterForDispose方法可用于以這種方式注冊(cè) IDisposable對(duì)象以進(jìn)行處理。它接受實(shí)現(xiàn) IDisposable接口的類的實(shí)例,并確保作為參數(shù)傳遞給它的 IDisposable對(duì)象隨每個(gè)請(qǐng)求自動(dòng)處理。

以下代碼演示了如何使用 HttpResponse.RegisterForDispose 方法在每個(gè) HTTP 請(qǐng)求結(jié)束時(shí)注冊(cè) FileManager類的實(shí)例。

public class DefaultController: ControllerBase {
    readonly IDisposable _disposable;
    public DefaultController() {
            _disposable = new FileManager();
    }
}

4. 使用內(nèi)置的 IoC 容器處理 IDisposable 對(duì)象

另一種自動(dòng)處理 IDisposable對(duì)象的方法是使用 ASP.NET Core 中的內(nèi)置 IoC(控制反轉(zhuǎn))容器。您可以利用 TransientScopedSingleton實(shí)例來創(chuàng)建服務(wù)并將它們添加到內(nèi)置 IoC 容器中。

IDisposable對(duì)象添加到 Startup類的 ConfigureServices方法中的 IoC 容器,以便這些對(duì)象隨每個(gè) HTTP 請(qǐng)求自動(dòng)處理。

5. 使用 IHostApplicationLifetime 事件處理 IDependency 對(duì)象

ASP.NET Core 有一個(gè)名為 IHostApplicationLifetime的接口,允許您在應(yīng)用程序啟動(dòng)或關(guān)閉時(shí)運(yùn)行自定義代碼。您可以利用此接口的 Register方法來注冊(cè)事件。

Startup類的 Configure方法可以接受以下參數(shù):

  • IApplicationBuilder
  • IHostingEnvironment
  • ILoggerFactory
  • IHostApplicationLifetime

以下代碼演示了如何使用 IHostApplicationLifetime接口注冊(cè)對(duì)象以在應(yīng)用程序關(guān)閉時(shí)進(jìn)行處置。

public void Configure(IApplicationBuilder app, IHostApplicationLifetime hostApplicationLifetime) {
    hostApplicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown() {
    // 釋放對(duì)象的代碼
}

最后,ASP.NET Core 6 中默認(rèn)不會(huì)創(chuàng)建 Startup.cs。我們需要手動(dòng)創(chuàng)建一個(gè),然后在 Program.cs 文件中編寫以下代碼以指定您將在其中使用的 Startup 類應(yīng)用程序。

var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.UseStartup<Startup>();
});
using var app = builder.Build();
app.Run();

與 Finalize 不同,我們顯式使用 Dispose 方法來釋放非托管資源。您應(yīng)該在實(shí)現(xiàn)它的任何對(duì)象上顯式調(diào)用 Dispose 方法,以釋放該對(duì)象可能持有其引用的任何非托管資源。

參考資料:

1. C#教程

2. 編程寶庫

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 部署ASP.NET?Core程序到Windows系統(tǒng)

    部署ASP.NET?Core程序到Windows系統(tǒng)

    這篇文章介紹了部署ASP.NET?Core程序到Windows系統(tǒng)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹,想要使用新版本的朋友可以參考下
    2012-04-04
  • ASP.NET?Core中的靜態(tài)文件

    ASP.NET?Core中的靜態(tài)文件

    這篇文章介紹了ASP.NET?Core中的靜態(tài)文件,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET?Core?MVC中的布局(Layout)

    ASP.NET?Core?MVC中的布局(Layout)

    這篇文章介紹了ASP.NET?Core?MVC中的布局(Layout),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET 頁面事件執(zhí)行順序介紹

    ASP.NET 頁面事件執(zhí)行順序介紹

    當(dāng)頁面進(jìn)行回發(fā)時(shí),如點(diǎn)擊按鈕,以上事件都會(huì)重新執(zhí)行一次,這時(shí)的執(zhí)行順序?yàn)镺nPreInit、OnInit、OnInitComplete等等,感興趣的朋友可以參考下哈
    2013-04-04
  • C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之一

    C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之一

    C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之一...
    2006-08-08
  • 一步步打造漂亮的新聞列表(無刷新分頁、內(nèi)容預(yù)覽)第三章

    一步步打造漂亮的新聞列表(無刷新分頁、內(nèi)容預(yù)覽)第三章

    前面兩個(gè)章節(jié)我們將需求分析和概要設(shè)計(jì)簡單介紹了,接下來是重點(diǎn)的編代碼的階段了(實(shí)現(xiàn)無刷新分頁)。在編寫代碼之前,一定要有計(jì)劃的去編寫代碼,不能一開始啥也不管就開始編代碼,除非你特牛。
    2010-07-07
  • IE 性能分析工具(asp.net環(huán)境)

    IE 性能分析工具(asp.net環(huán)境)

    這個(gè)工具應(yīng)該很有用,因?yàn)橛?IE 的人實(shí)在是太多了~~萬惡的IE6 !
    2010-08-08
  • WPF框架Prism中導(dǎo)航Navigation用法介紹

    WPF框架Prism中導(dǎo)航Navigation用法介紹

    這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 詳解ABP框架的參數(shù)有效性驗(yàn)證和權(quán)限驗(yàn)證

    詳解ABP框架的參數(shù)有效性驗(yàn)證和權(quán)限驗(yàn)證

    ABP框架是基于ASP.NET的Web開發(fā)框架(GitHub: https://github.com/aspnetboilerplate),在ASP.NET框架之上又添加了更強(qiáng)大的功能,這里我們就來詳解ABP框架的參數(shù)有效性驗(yàn)證和權(quán)限驗(yàn)證
    2016-06-06

最新評(píng)論

洱源县| 宿迁市| 南康市| 乌什县| 绥宁县| 湟源县| 浮梁县| 名山县| 永福县| 沁源县| 勃利县| 峨眉山市| 永寿县| 霞浦县| 诸城市| 泰州市| 卢龙县| 平阳县| 舒兰市| 兴国县| 合阳县| 承德县| 肇东市| 三河市| 榆树市| 定兴县| 获嘉县| 瑞安市| 邯郸市| 高唐县| 滕州市| 绥化市| 淄博市| 广平县| 文山县| 靖安县| 金阳县| 安康市| 石门县| 巩义市| 永福县|