日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 3.0 可回收程序集加载上下文

發布時間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 3.0 可回收程序集加载上下文 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.NET誕生以來,程序集的動態加載和卸載都是一個Hack的技術,之前的NetFx都是使用AppDomain的方式去加載程序集,然而AppDomain并沒有提供直接卸載一個程序集的API,而是要卸載整個AppDomain才能卸載包含在其中的所有程序集。然而卸載整個CurrentAppDomain會使程序不能工作。可能有人另辟西經,創建別一個AppDomain來加載/卸載程序集,但是由于程序集之間是不能跨域訪問的,也導致只能通過Remote Proxy的方式去訪問,這樣在類型創建和使用上帶來了一定的難度也是類型的繼承變得相當復雜。

.NET Core中一直沒有AppDomain的支持。但是在.NET Core 3.0中,我最期待的一個特性就是對可收集程序集的支持(Collectible AssemblyLoadContext)。 眾所周知.NET Core中一直使用AssemblyLoadContext的API,來進行程序集的動態加載,但是并沒有提供Unload的方法,此次升級更新了這方面的能力。

其實這次AssemblyLoadContext的設計,我認為更像是Java中ClassLoader的翻版,可以說非常類似。在使用過程中自定義AssemblyLoadContext可以內部管理其中的程序集,并對整體Context進行Unload。使用AssemblyLoadContext也可以避免程序集名稱和版本的沖突。

.NET Core 3.0還沒有正式版,所有要使用預覽版的SDK完成以下實例。我使用的是.NET Core SDK 3.0.100-preview-009812

dotnet new globaljson --sdk-version 3.0.100-preview-009812

AssemblyLoadContext是一個抽象類的,我們需要子類化。下面顯示的是我們創建自定義AssemblyLoadContext的方法,實現一個可回收的Context需要在構造器中指定isCollectible: true :

public class CollectibleAssemblyLoadContext : AssemblyLoadContext
{
public CollectibleAssemblyLoadContext() : base(isCollectible: true)
{ }

protected override Assembly Load(AssemblyName assemblyName)
{
return null;
}
}

使用netstandard2.0創建一個library

using System;

namespace SampleLibrary
{
public class SayHello
{
public void Hello(int iteration)
{
Console.WriteLine($"Hello {iteration}!");
}
}
}

測試Load/Unload

var context = new CollectibleAssemblyLoadContext();
var assemblyPath = Path.Combine(Directory.GetCurrentDirectory(),"SampleLibrary.dll");
using (var fs = new FileStream(assemblyPath, FileMode.Open, FileAccess.Read))
{
var assembly = context.LoadFromStream(fs);

var type = assembly.GetType("SampleLibrary.SayHello");
var greetMethod = type.GetMethod("Hello");

var instance = Activator.CreateInstance(type);
greetMethod.Invoke(instance, new object[] { i });
}

context.Unload();

GC.Collect();
GC.WaitForPendingFinalizers();

當執行GC收回后,加載的程序集會被完全的回收。

  GitHub:https://github.com/maxzhang1985/YOYOFx?如果覺還可以請Star下, 歡迎一起交流。

  .NET Core 開源學習群:214741894

原文地址:https://www.cnblogs.com/maxzhang1985/p/10875278.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?


總結

以上是生活随笔為你收集整理的.NET Core 3.0 可回收程序集加载上下文的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久资源av | 美女喷液视频 | 女优视频在线观看 | 华人在线视频 | av动态| 男人免费网站 | 91国模少妇一区二区三区 | 欧美在线91 | 人人澡超碰碰 | av爱爱网站 | 国产婷婷色一区二区在线观看 | 中国极品少妇xxxx做受 | 福利精品在线 | 永久免费看黄网站 | 欧美一级生活片 | 尤物193.com| 国产精品99re| 伊人网伊人影院 | 国产精品色婷婷99久久精品 | 人人妻人人爽一区二区三区 | 黄色一级大片在线免费看国产 | 亚洲AV无码片久久精品 | 黄色a免费 | 免费的av片| 涩涩涩涩涩涩涩涩涩涩 | 成人精品一区二区三区中文字幕 | 4438国产精品一区二区 | 日日艹夜夜艹 | 狂野欧美性猛交blacked | 在线不卡二区 | 日韩在线播放视频 | 欧美日本中文 | 婷婷久久综合网 | 丰满岳妇伦在线播放 | 亚洲乱视频 | 韩国一区二区三区四区 | 黄色片网站在线观看 | 免费国产黄色 | 中文字幕在线免费视频 | 日韩av一区二区三区四区 | 成人欧美一区二区三区在线观看 | 免费黄色高清视频 | 开心激情av| 综合色区 | 成人午夜视频免费 | 在哪里可以看毛片 | 女生的胸无遮挡 | 波多野结衣免费视频观看 | 奇米影视久久久 | 操日本女人| 尹人av| 天天激情站 | 91丝袜呻吟高潮美腿白嫩 | 中文字幕在线日本 | 久久99精品久久久 | 日日干天天射 | 中文字幕免费在线观看 | 粉嫩视频在线观看 | 性欧美在线视频 | 亚洲一区和二区 | 成人久久免费 | www.色婷婷.com | 波多野结衣大片 | 亚洲人成77777 | www.av网站| 99热都是精品 | 精品国产自在精品国产精小说 | 强睡邻居人妻中文字幕 | 精品动漫一区二区 | 村上里沙番号 | 性欧美视频在线观看 | 日韩www.| 色噜噜狠狠一区二区三区牛牛影视 | 天堂v在线观看 | www.久久艹 | 天天爽一爽 | 超碰人人爱人人 | 日本福利小视频 | 国产www免费观看 | 色中色av | 一区二区三区四区在线播放 | 欧美在线观看一区二区三区 | 欧美日韩精品一区二区三区视频播放 | 国产精品久久久91 | 亚洲成人黄色 | 在线观看一区视频 | 91浏览器在线观看 | av资源首页 | 欧美日一区二区 | 国产美女自拍视频 | 91蝌蚪网| 国产欧美亚洲精品 | 欧美性高潮 | 日韩欧美视频在线 | 99热这里只有精品2 91免费版黄 | 亚洲三级成人 | 欧美色亚洲色 | 国产经典毛片 | 日韩一级 |