最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C# 代碼占用的空間

 更新時(shí)間:2018年02月26日 11:28:51   作者:lindexi  
這篇文章主要介紹了C# 代碼占用的空間的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

是不是代碼會(huì)占用空間,如果一個(gè)程序初始化需要 100M 的代碼,那么在他初始化之后,這些代碼就沒(méi)有作用了,他會(huì)不會(huì)占空間?本文經(jīng)過(guò)測(cè)試發(fā)現(xiàn),代碼也是會(huì)占空間。

我寫(xiě)了2k個(gè)垃圾類(lèi)代碼,然后把他放在一個(gè)項(xiàng)目 BhgpsWnb,使用另一個(gè)項(xiàng)目去引用他。是不是覺(jué)得軟件在運(yùn)行的時(shí)候就需要很多的內(nèi)存來(lái)放代碼?

引用垃圾程序的項(xiàng)目是 ReKlnma ,先只是在引用添加項(xiàng)目引用,然后在不使用 BhgpsWnb 這個(gè)項(xiàng)目的代碼,我運(yùn)行下面的代碼

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

占用 7 M 內(nèi)存,而如果運(yùn)行了存在 2k 垃圾代碼 BhgpsWnb 程序,就需要 8M 。使用方法是創(chuàng)建一個(gè)類(lèi),這個(gè)類(lèi)就是垃圾代碼里面的一個(gè),這樣就需要把dll放在內(nèi)存。

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

如果覺(jué)得因?yàn)閯?chuàng)建一個(gè)類(lèi)需要的內(nèi)存太大,那么我使用下面的代碼,只是拿到一個(gè)類(lèi)型,但是需要的內(nèi)存是 8M 因?yàn)槌绦驎?huì)把另一個(gè)程序加載

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

下面來(lái)?yè)Q個(gè)方式寫(xiě),取消對(duì)垃圾程序的直接引用。使用 Load 方法去加載,可以看到垃圾程序 BhgpsWnb 有 8M ,一般的庫(kù)可沒(méi)有那么大。

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

結(jié)果使用內(nèi)存需要 8M 多,所以代碼也是需要內(nèi)存的,一旦加載了就不會(huì)從程序集卸載。

如果是加載程序集,那么加載程序集就需要很多的內(nèi)存,即使卸載程序也沒(méi)有用      

 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的內(nèi)存,在后面使用 Unload 之后實(shí)際上內(nèi)存也沒(méi)有減少,所以建議不要使用程序集加載方式,這個(gè)方式使用很多內(nèi)存。

可以通過(guò)指定名稱(chēng)加載,可以看到下面的代碼需要使用內(nèi)存比較小,需要 9M ,但是 Unload 之后沒(méi)有減少內(nèi)存     

 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 ,千萬(wàn)不要使用把文件作為 byte 讀出來(lái),然后加載,這個(gè)方法需要很多的內(nèi)存。

總結(jié)

以上所述是小編給大家介紹的C# 代碼占用的空間,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

彰武县| 聂拉木县| 延寿县| 东光县| 广宁县| 南召县| 湖口县| 望奎县| 永济市| 新干县| 陇南市| 内江市| 平陆县| 平定县| 博客| 金门县| 米泉市| 芜湖市| 谢通门县| 三江| 屏南县| 宁津县| 宁明县| 玛纳斯县| 上饶市| 乐至县| 宜君县| 岳西县| 浦江县| 万载县| 略阳县| 咸宁市| 漳州市| 大关县| 阿荣旗| 任丘市| 江西省| 烟台市| 九龙县| 金沙县| 巴林右旗|