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% 首先抱歉,因为昨天那帖图片几次都不能用,修改到不能再次修改,今天早上回帖又提示没有这个帖,只好重发一次. 如 ...
随机推荐
- C#中#region和#endregion的用法
一.用法说明 #region 说明 Program1 #endregion 二.作用 (1)注释其中间的代码段 (2)折叠中间的代码块(折叠后的说明文字为#region后面的说明)
- Dada_WenJian
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWr ...
- select 多选 (EasyUI)
<script type="text/javascript" src="/EasyUI/jquery.min.js"></script> ...
- web的几种轮播
我们在开发当中经常用到轮播.我在这里总结了一下几种,仅供参考: 第一种: 1.jQuery:用display :none/block控制的一种轮播: // CSS部分 #igs { margin: 3 ...
- Maven 下载和配置环境
1.下载 Maven 的网址 www.apache.org www.apache.org 下载放到自己的文件夹里然后解压出来 然后配置环境,打开 我的电脑 按鼠标右键右键 属性 按 新建 然 ...
- vim查找格式
使用了VIM这么久,却一直无法牢记一些基本的操作指令.今天查找一个关键字时,想不起来怎么查找“下一个”,于是google之并解决,顺便把有用的都贴过来罢. 查找指令:/xxx 往下查找?xxx 往上 ...
- PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法
PL/SQL查询时,如果Number(17)以上的大数,会显示为科学计数法 解决方法: TOOLS->PREFERENCES->WINDOW TYPE->SQL WINDOW下选中N ...
- 使用iperf测试网卡吞吐性能
原 使用iperf测试网卡吞吐性能 2018年12月17日 12:38:41 lancewoo 阅读数:138 首先配置待测试的两个网卡的网络地址到同一网段,保证ping对方的IP地址时可以通.两 ...
- 经纬度编码方法推荐-plus code简介
今天罗孚为大家推荐一种经纬度编码的方法--plus code,原名open location code,是Google于2014年发明的,旨在将表示地理位置的经纬度通过算法推导成一个字符串. plus ...
- Android 解压zip文件你知道多少?
对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...