C# 在while循环中new的对象
一:
问:那每次循环都会new一个A?那内存不是会满吗?还是说要把这个初始化对象的动作放到循环外面的写法会比较好?
while(true)
{
A a = new A();
...
sleep(1000)
}
答:对象情况下的结论
1、内存和性能
如果一个对象实例被声明在循环内部,那么每次执行循环体时都会为对象重新分配内存并初始化对象实例。初始化过程并不会占用过多的时间,但是内存分配会。在某种情况下,你可能无法跑到循环外部去创建对象实例。不过,如果可能的话,重置并重用对象应该是更好的选择。 2、可读性
正如我针对基本数据类型喜欢在循环外部进行变量声明一样,只要有可能,我就会在循环内部重置对象实例而不是重新创建一个。当然,如果被使用的对象实例很小,并且循环的次数不多的话,那么这个问题就不是那么突出了。不过,对这个问题还是小心一点好3、结论
如你所见,到底在循环内部或外部进行声明这个问题,对于对象而言是有差别的;而对于基本数据类型而言,则更多地是个人选择问题。我的个人观点是,如果能够在循环体中对对象实例进行重用,那么最好采用这种方案。从一致性角度讲,我相信将变量在循环体外部进行声明会更好。所以,如果你能对对象实例进行重用,那么你大可不必改变你的编码习惯。for (int i = 0; i < 10; i++)
{
Person p1 = new Person();
p1.Name = "桂洪";
Console.WriteLine(p1.Name); }
Console.ReadKey();
答:对象是有作用域的,到你下一次再进来时上一次的对象就不存在了。对象在进入作用域时产生,在超出做用域后会回收掉
所以不会重复
Person p1 = new Person();
for (int i = ; i < ; i++)
{ p1.Name = "桂洪";
Console.WriteLine(p1.Name);
}
Console.ReadKey();
这样写的效果是一样的,在循环里第一个循环就是一个新的作用域,上一个就会被覆盖掉,里面的对象也就自然不存在了,你可以直白点想,如果对象会覆盖那么循环也会覆盖,所以就不会冲突了。
C# 在while循环中new的对象的更多相关文章
- vue 如何在循环中 "监听" 的绑定v-model数据
vue 如何在循环中 "监听" 的绑定v-model数据 阅读目录 vue 如何在循环中 "监听" 的绑定v-model数据 1. 普通属性的值进行监听 2. ...
- for循环中i--的妙用 及 两变量互换数值的问题
int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * ...
- Python 之 for循环中的lambda
第一种 f = [lambda x: x*i for i in range(4)] (如果将x换成i,调用时候就不用传参数,结果都为3) 对于上面的表达式,调用结果: >>> f ...
- 在jquery中each循环中,要用return false代替break,return true代替continue。
在jquery中each循环中,要用return false代替break,return true代替continue. $.each(data, function (n, value) { if(v ...
- JavaScript形而上的For循环中的Break
break相当于循环中的GOTO,需避免使用. 下面是一个break使用例子. 找出第一个months小于7的项目. const cats = [ { name: 'Mojo', months: 84 ...
- Java循环中try...finally...遇到continue
一段很简单的代码,先自己在大脑中给出结果: for (int i = 0; i < 5; i++) { System.out.println("enter: i=" + i) ...
- 浅谈循环中setTimeout执行顺序问题
浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...
- django for 循环中,获取序号
模板的for循环中,如何获取序号? 想过用enumerate,但是在模板中会报错 Could not parse the remainder xxx: 后来搜到 forloop.counter,完美解 ...
- JS如何获取PHP循环中的ID
JS如何获取PHP循环中的ID kaalrz 二路公交车 结帖率:83.33% 首先抱歉,因为昨天那帖图片几次都不能用,修改到不能再次修改,今天早上回帖又提示没有这个帖,只好重发一次. 如 ...
随机推荐
- python序列类型字符串的方法L.index()与L.find()区别
首先官方解释 S.index(sub[, start[, end]]) -> int Like S.find() but raise ValueError when the substring ...
- BZOJ4970 : [ioi2004]empodia 障碍段
通过两遍单调栈求出每个点作为最小值往右延伸到$g[i]$,作为最大值往左延伸到$f[i]$. 那么一个区间$[i,j]$可行当且仅当$g[i]\geq j$.$f[j]\leq i$且$i-a[i]= ...
- redis(一)
NoSQL简介 NoSQL,全名为Not Only SQL,指的是非关系型的数据库 随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来 优点/缺点 优点: 高可扩展性 分布式计算 ...
- Wooden Sticks [POJ1065] [DP]
Description 有N根木棍等待处理.机器在处理第一根木棍时需要准备1分钟,此后遇到长宽都不大于前一根木棍的木棍就不需要时间准备,反之则需要1分钟重新准备.比如木棍按照(3,3).(1,3).( ...
- 通过echarts的demo
通过最近两天对echarts的了解,下面用echarts.js写了一个小效果: 效果的demo为: <!DOCTYPE html> <html lang="en" ...
- js float运算精度问题
先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的.自己写了一波解决方法(不能 ...
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
- 2017年50道Java线程面试题
下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编 ...
- SpringBoot读取配置文件(从classpath/file读取yml/properties文件)
一.读取properties文件 使用配置项@PropertySource 二.读取yml文件 启动类添加下面代码: @Bean public static PropertySourcesPlac ...
- 用C++实现半透明按钮控件(PNG,GDI+)
使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的.另一个是不带的). 控件继承自CWnd类(彩色的部分是窗口的背景图片.按钮是PNG图片,第二个图标是鼠 ...