亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#代碼占用空間的示例分析

發布時間:2021-08-30 11:41:14 來源:億速云 閱讀:139 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關C#代碼占用空間的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

是不是代碼會占用空間,如果一個程序初始化需要 100M 的代碼,那么在他初始化之后,這些代碼就沒有作用了,他會不會占空間?本文經過測試發現,代碼也是會占空間。

我寫了2k個垃圾類代碼,然后把他放在一個項目 BhgpsWnb,使用另一個項目去引用他。是不是覺得軟件在運行的時候就需要很多的內存來放代碼?

C#代碼占用空間的示例分析

引用垃圾程序的項目是 ReKlnma ,先只是在引用添加項目引用,然后在不使用 BhgpsWnb 這個項目的代碼,我運行下面的代碼

static void Main(string[] args)
    {
      Console.ReadKey();
    }

占用 7 M 內存,而如果運行了存在 2k 垃圾代碼 BhgpsWnb 程序,就需要 8M 。使用方法是創建一個類,這個類就是垃圾代碼里面的一個,這樣就需要把dll放在內存。

static void Main(string[] args)
    {
      var ablkekbuuimc = new Ablkekbuuimc();
      ablkekbuuimc.Aaxfyerenjmfe(2);
      Console.ReadKey();
    }

如果覺得因為創建一個類需要的內存太大,那么我使用下面的代碼,只是拿到一個類型,但是需要的內存是 8M 因為程序會把另一個程序加載

static void Main(string[] args)
    {
      Type t = typeof(Ablkekbuuimc);
      Console.ReadKey();
    }

下面來換個方式寫,取消對垃圾程序的直接引用。使用 Load 方法去加載,可以看到垃圾程序 BhgpsWnb 有 8M ,一般的庫可沒有那么大。

C#代碼占用空間的示例分析

static void Main(string[] args)
    {
      var file = new FileInfo("BhgpsWnb.exe");
      Assembly.LoadFile(file.FullName);
      Console.ReadKey();
    }

結果使用內存需要 8M 多,所以代碼也是需要內存的,一旦加載了就不會從程序集卸載。

如果是加載程序集,那么加載程序集就需要很多的內存,即使卸載程序也沒有用      

 static void Main(string[] args)
    {
      var app = Load();
      GC.Collect();
      GC.WaitForFullGCComplete();
      Console.ReadKey();
      AppDomain.Unload(app);
      Console.ReadKey();
      GC.Collect();
      GC.WaitForFullGCComplete();
    }
    private static AppDomain Load()
    {
      var file = new FileInfo("BhgpsWnb.exe");
      var otherAssemblyBytes = File.ReadAllBytes(file.FullName);
      var app = AppDomain.CreateDomain("BhgpsWnb");
      app.Load(otherAssemblyBytes);
      return app;
    }

上面的代碼使用了 Load 就需要 20M的內存,在后面使用 Unload 之后實際上內存也沒有減少,所以建議不要使用程序集加載方式,這個方式使用很多內存。

可以通過指定名稱加載,可以看到下面的代碼需要使用內存比較小,需要 9M ,但是 Unload 之后沒有減少內存     

 static void Main(string[] args)
    {
      var app = Load();
      GC.Collect();
      GC.WaitForFullGCComplete();
      Console.ReadKey();
      AppDomain.Unload(app);
      GC.Collect();
      GC.WaitForFullGCComplete();
      Console.ReadKey();
    }
    private static AppDomain Load()
    {
      var file = new FileInfo("BhgpsWnb.exe");
      var app = AppDomain.CreateDomain("BhgpsWnb", null, file.DirectoryName, file.DirectoryName, false);
      app.Load("BhgpsWnb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
      return app;
    }

所以在加載 dll ,千萬不要使用把文件作為 byte 讀出來,然后加載,這個方法需要很多的內存。

感謝各位的閱讀!關于“C#代碼占用空間的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东源县| 新民市| 靖西县| 财经| 微博| 麻江县| 柘城县| 敦煌市| 温州市| 凤庆县| 柏乡县| 象州县| 宝坻区| 阳原县| 永年县| 无为县| 鹤壁市| 上杭县| 浮梁县| 康乐县| 菏泽市| 会理县| 渭源县| 噶尔县| 育儿| 嫩江县| 乐都县| 饶阳县| 台中市| 木里| 萨嘎县| 玉山县| 汽车| 汕尾市| 望都县| 遵义市| 山西省| 南木林县| 阿拉善左旗| 双峰县| 上虞市|