激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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。其實,我們可以在一個實現了 IDisposable接口的類型上使用 Dispose方法。

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

使用 VS2022 創建 ASP.NET Core 項目

我們在 Visual Studio 2022 中創建一個 ASP.NET Core 項目。按照以下步驟在 Visual Studio 2022 中創建一個新的 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) 根據您的偏好,可選擇選中 “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)” 復選框,因為我們將創建自己的控制器。
  • 10) 單擊創建。

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

1. 創建一個實現 IDisposable 接口的類

我們現在將創建一個實現 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類實現 IDisposable接口并包含兩個方法:WriteDispose。前者用于將文本異步寫入文件,后者用于通過調用 FileStream類的 Dispose方法從內存中刪除 FileStream實例。

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

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

處理 IDisposable實例的最簡單方法是使用“using”語句,它會自動調用實例上的 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 應用程序中工作時,我們可能經常需要在 HTTP 請求結束時處理對象。

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

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

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

4. 使用內置的 IoC 容器處理 IDisposable 對象

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

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

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

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

Startup類的 Configure方法可以接受以下參數:

  • 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 中默認不會創建 Startup.cs。我們需要手動創建一個,然后在 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 方法來釋放非托管資源。您應該在實現它的任何對象上顯式調用 Dispose 方法,以釋放該對象可能持有其引用的任何非托管資源。

參考資料:

1. C#教程

2. 編程寶庫

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片电影网址 | 欧美亚洲啪啪 | 成人黄色免费网址 | 亚洲成人福利电影 | 久久国产精品二国产精品中国洋人 | 失禁高潮抽搐喷水h | 奇米影视奇奇米色狠狠色777 | 久久久久亚洲a | a一级黄色大片 | 色视频在线 | 青青操国产 | 红杏亚洲影院一区二区三区 | 成年免费视频黄网站在线观看 | 一级美女大片 | 欧美a久久 | 超久久| 日本精品一区二区 | 午夜国产成人 | 亚洲av一级毛片特黄大片 | 日日摸夜夜骑 | 国产亚洲综合一区二区 | 国产精品自拍啪啪 | 日韩一级免费 | 粉嫩粉嫩一区二区三区在线播放 | 国产午夜精品一区二区三区四区 | 91看片在线免费观看 | 日韩大片在线永久观看视频网站免费 | 久久精品视频网址 | 亚洲天堂在线电影 | 鲁丝一区二区三区不属 | 久久综合爱| 露脸各种姿势啪啪的清纯美女 | 国产美女三级做爰 | 欧美成人精品不卡视频在线观看 | 久草在线资源福利站 | 91网站链接 | 羞羞的网址 | 成人免费在线播放 | 九九视屏 | 成人在线免费小视频 | 一级毛片播放 |