一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET在VS2022中使用Dispose釋放資源實例

ASP.NET在VS2022中使用Dispose釋放資源實例

2022-01-22 22:16編程寶庫 ASP.NET教程

這篇文章介紹了ASP.NET在VS2022中使用Dispose釋放資源實例,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

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

本文中提供的代碼示例均默認運行在 Visual Studio 2022。

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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類實現(xiàn) IDisposable接口并包含兩個方法:WriteDispose。前者用于將文本異步寫入文件,后者用于通過調(diào)用 FileStream類的 Dispose方法從內(nèi)存中刪除 FileStream實例。

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

2. 使用 “using” 語句處理 IDisposable 對象

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

?
1
2
3
4
using(FileManager fileManager = new FileManager())
{
        await fileManager.Write("This is a text");
}

3. 在請求結束時處理 IDisposable 對象

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

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

以下代碼演示了如何使用 HttpResponse.RegisterForDispose 方法在每個 HTTP 請求結束時注冊 FileManager類的實例。

?
1
2
3
4
5
6
public class DefaultController: ControllerBase {
    readonly IDisposable _disposable;
    public DefaultController() {
            _disposable = new FileManager();
    }
}

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

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

IDisposable對象添加到 Startup類的 ConfigureServices方法中的 IoC 容器,以便這些對象隨每個 HTTP 請求自動處理。

5. 使用 IHostApplicationLifetime 事件處理 IDependency 對象

ASP.NET Core 有一個名為 IHostApplicationLifetime的接口,允許您在應用程序啟動或關閉時運行自定義代碼。您可以利用此接口的 Register方法來注冊事件。

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

  • IApplicationBuilder
  • IHostingEnvironment
  • ILoggerFactory
  • IHostApplicationLifetime

以下代碼演示了如何使用 IHostApplicationLifetime接口注冊對象以在應用程序關閉時進行處置。

?
1
2
3
4
5
6
public void Configure(IApplicationBuilder app, IHostApplicationLifetime hostApplicationLifetime) {
    hostApplicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown() {
    // 釋放對象的代碼
}

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

?
1
2
3
4
5
6
7
var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.UseStartup<Startup>();
});
using var app = builder.Build();
app.Run();

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

參考資料:

1. C#教程

2. 編程寶庫

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/wanghao72214/p/15597516.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爱福利视频一区二区 | chinese国产打屁股 | 午夜影院c绿象 | 美女下面揉出水免费视频 | 国产第一草草影院 | 亚洲激情偷拍 | 国产一级特黄在线播放 | 激情男人天堂 | 千金肉奴隶在线观看 | 国产香蕉视频在线观看 | 女仆掀起蕾丝裙被打屁股作文 | 久草在线福利资站免费视频 | 美女被视频网站 | 久久亚洲精品AV成人无码 | 校园全肉高h湿一女多男 | t66y地址一地址二地址三 | 国色天香高清版 | 久久亚洲网站 | 国产v在线在线观看羞羞答答 | 猫扑俩性| 亚洲人成综合在线播放 | 无人区1在线观看 | 色老板在线免费视频 | 国产精品久久毛片蜜月 | 性做久久久久久久久浪潮 | 欧美日韩国产亚洲一区二区 | 国产嘿咻 | 拍拍叫痛的无挡视频免费 | 欧美日韩一区二区三区免费 | 亚洲无线一二三四区 | 国产精品成人免费福利 | 我的青梅竹马是消防员2季未增删免费 | 亚洲欧美成人中文在线网站 | 欧美va天堂va视频va在线 | 四虎私人影院 | 日韩欧美一区二区三区中文精品 | 午夜欧美精品久久久久久久久 | 国产在线欧美精品 | 美女扒开屁股让我桶免费 | 成人啪啪漫画全文阅读 | 波多野结在线 |