<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET Core 3.0 可回收程序集加載上下文的實現

        來源:懂視網 責編:小采 時間:2020-11-27 22:34:27
        文檔

        .NET Core 3.0 可回收程序集加載上下文的實現

        .NET Core 3.0 可回收程序集加載上下文的實現:一、前世今生 .NET誕生以來,程序集的動態加載和卸載都是一個Hack的技術,之前的NetFx都是使用AppDomain的方式去加載程序集,然而AppDomain并沒有提供直接卸載一個程序集的API,而是要卸載整個AppDomain才能卸載包含在其中的所有程序集。然而卸載整個Curr
        推薦度:
        導讀.NET Core 3.0 可回收程序集加載上下文的實現:一、前世今生 .NET誕生以來,程序集的動態加載和卸載都是一個Hack的技術,之前的NetFx都是使用AppDomain的方式去加載程序集,然而AppDomain并沒有提供直接卸載一個程序集的API,而是要卸載整個AppDomain才能卸載包含在其中的所有程序集。然而卸載整個Curr

        一、前世今生

        .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

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

        三、Getting Started

        .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下, 歡迎一起交流。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET Core 3.0 可回收程序集加載上下文的實現

        .NET Core 3.0 可回收程序集加載上下文的實現:一、前世今生 .NET誕生以來,程序集的動態加載和卸載都是一個Hack的技術,之前的NetFx都是使用AppDomain的方式去加載程序集,然而AppDomain并沒有提供直接卸載一個程序集的API,而是要卸載整個AppDomain才能卸載包含在其中的所有程序集。然而卸載整個Curr
        推薦度:
        標簽: 加載 實現 net
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 1000部禁片黄的免费看| a级片免费在线播放| 免费可以在线看A∨网站| 亚洲高清免费在线观看| 99热在线免费播放| 亚洲AV日韩精品久久久久久| 在线观看片免费人成视频播放| 亚洲国产精品无码久久久| 无码专区AAAAAA免费视频| 亚洲黄色免费在线观看| 国产福利视精品永久免费| 99热在线日韩精品免费| 免费做爰猛烈吃奶摸视频在线观看| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 免费人成黄页在线观看日本| 免费成人在线观看| 国产亚洲一卡2卡3卡4卡新区 | 亚洲乱码无限2021芒果 | 久久精品国产亚洲AV麻豆~| 国产精品无码亚洲精品2021| 日韩精品内射视频免费观看 | 亚洲狠狠婷婷综合久久蜜芽| 国产成人亚洲综合网站不卡| 美丽的姑娘免费观看在线播放| 24小时日本在线www免费的| 亚洲网站免费观看| 无码国产精品一区二区免费| 91亚洲国产在人线播放午夜| 色播精品免费小视频| 国产精品亚洲专区在线观看| 午夜成年女人毛片免费观看| 曰批全过程免费视频在线观看| 日韩免费无码视频一区二区三区 | 美女免费视频一区二区| 日本黄色免费观看| 亚洲一区二区三区免费观看| **一级一级毛片免费观看| 亚洲成年人在线观看| 野花高清在线观看免费完整版中文| 免费日本黄色网址| 全部在线播放免费毛片|