中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

正定县| 沙坪坝区| 手游| 兴安县| 大关县| 广南县| 仁怀市| 邹平县| 南城县| 秦皇岛市| 安西县| 福泉市| 偃师市| 壶关县| 曲松县| 榆树市| 涪陵区| 东丽区| 郓城县| 周至县| 连南| 嘉善县| 定安县| 来安县| 常宁市| 防城港市| 岫岩| 司法| 泾阳县| 锦屏县| 金川县| 确山县| 永城市| 富锦市| 怀宁县| 明水县| 榆林市| 永州市| 巨鹿县| 昌宁县| 呼玛县|