2018-8-10-C#-代码占用的空间
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
C# 代码占用的空间
|
lindexi
|
2018-08-10 19:16:52 +0800
|
2018-2-13 17:23:3 +0800
|
C#
|
是不是代码会占用空间,如果一个程序初始化需要 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 读出来,然后加载,这个方法需要很多的内存。
2018-8-10-C#-代码占用的空间的更多相关文章
- shell-脚本-作用是发现前10个最占用磁盘空间的文件
#!/bin/bash## 这个脚本的作用是发现前10个最占用磁盘空间的文件################定义这个脚本的全区变量##################################C ...
- C# 代码占用的空间
是不是代码会占用空间,如果一个程序初始化需要 100M 的代码,那么在他初始化之后,这些代码就没有作用了,他会不会占空间?本文经过测试发现,代码也是会占空间. 我写了2k个垃圾类代码,然后把他放在一个 ...
- C++的引用类型的变量到底占不占用内存空间?
——by karottc 分析一下 C++ 里面的引用类型(例如: int &r = a; )中的 r 变量是否占用内存空间呢?是否和 int *p = &a; 中的 p 变量 ...
- Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
关键词:VSS.RSS.PSS.USS._mapcount.pte_present.mem_size_stats. 在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/US ...
- [Unity Editor]10行代码搞定Hierarchy排序
在日常的工作和研究中,当给我们的场景摆放过多的物件的时候,Hierarchy面板就会变得杂乱不堪.比如这样: 过多的层次结构充斥在里面,根层的物件毫无序列可言,整个层次面板显示非常的杂乱不堪,如 ...
- 01 mybatis框架整体概况(2018.7.10)-
01 mybatis框架整体概况(2018.7.10)- F:\廖雪峰 JavaEE 企业级分布式高级架构师课程\廖雪峰JavaEE一期\第一课(2018.7.10) maven用的是3.39的版本 ...
- 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)
目录 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛链接 竞赛题目 总结 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛 ...
- C++中class在实例化前到底占用多少空间
最近忽然想起一个问题,C++中class在实例化前到底占用多少空间?我隐约记得书上是这么说的“类在实例化时才分配空间”!但是当我写下这个小程序的时候,杯具产生了—— #include<iostr ...
- Burn Down Chart(2018.6.4~2018.6.10)
Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...
随机推荐
- TyvjP2018 「Nescafé26」小猫爬山
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- 初探uni-app
第一步:下载 第二步:安装 第三步:创建项目 第四步:项目目录 项目运行 项目效果为 打包为原生App(云端) 运行打包 使用vue 效果如下,并不好看 使用代码如下 未完,待续.... 就是对着官网 ...
- PHP学习(数组)
数组就是一个键值对组成的语言结构,键类似于酒店的房间号,值类似于酒店房间里存储的东西. PHP有两种数组:索引数组.关联数组. 索引和关联两个词都是针对数组的键而言的. 索引数组 先介绍下索引数组,索 ...
- js将canvas保存成图片并下载
<canvas id="canvas" width="400" height="400"></canvas> < ...
- mysqldump命令之数据库迁移
格式说明如下: mysqldump -h源主机IP -u源主机用户 -p源主机用户密码 数据库名 | mysql -h目标主机IP -u目标主机用户 -p目标用户密码 数据库名
- php Laravel Thrift使用TMultiplexedProcessor复用端口模式
thrift的使用中一般是一个Server对应一个Processor和一个Transport,如果有多个服务的话,那必须要启动多个Server,占用多个端口,这种方式显然不是我们想要的,所以thrif ...
- Django中blank和NULL
当我们在django中添加一个数据库字段时,我们通常会写models.CharField(max_length = 100,null = True,blank = True).用ForeignKey, ...
- Date日期类,Canlendar日历类,Math类,Random随机数学类
Date日期类,SimpleDateFormat日期格式类 Date 表示特定的时间,精确到毫秒 常用方法 getTime() setTime() before() after() compareT ...
- Python学习之路12☞模块与包
一 模块 1.1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 1.2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前 ...
- js错误处理Try-catch和throw
1.try-catch语句 Try{ //可能会导致错误的代码 }catch(error){ //在错误发生时怎么处理 } 例如: try{ window.someNonexistentFunct ...