bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C#代碼占用空間的示例分析-創新互聯

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

成都創新互聯成立于2013年,先為香洲等服務建站,香洲等地企業,進行企業商務咨詢服務。為香洲企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

是不是代碼會占用空間,如果一個程序初始化需要 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#代碼占用空間的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:C#代碼占用空間的示例分析-創新互聯
標題來源:http://vcdvsql.cn/article34/cdijpe.html

成都網站建設公司_創新互聯,為您提供品牌網站建設網站改版營銷型網站建設手機網站建設商城網站網站收錄

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管