這篇文章給大家分享的是有關C#代碼占用空間的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創新互聯成立于2013年,先為香洲等服務建站,香洲等地企業,進行企業商務咨詢服務。為香洲企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。是不是代碼會占用空間,如果一個程序初始化需要 100M 的代碼,那么在他初始化之后,這些代碼就沒有作用了,他會不會占空間?本文經過測試發現,代碼也是會占空間。
我寫了2k個垃圾類代碼,然后把他放在一個項目 BhgpsWnb,使用另一個項目去引用他。是不是覺得軟件在運行的時候就需要很多的內存來放代碼?
引用垃圾程序的項目是 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 ,一般的庫可沒有那么大。
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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯