linq之Capacity(转载)
出处:博客园
作者:mumuliang
连接:http://www.cnblogs.com/mumuliang/p/3914425.html
Capacity
在.NET中List的容量应该只是受到硬件限制。
属性Capacity的真正含义,是创建List时给它预分配的容量。
一旦项的数量超过了当前的Capacity,Capacity会以
Capacity = (Capacity==0)?A_VALUE_YOU_CANNOT_SURE:(Capacity*2)
的方式增长。
当使用默认构造函数创建一个List时,Capacity就是0。(或者你非要用一个0作为capacity参数调用构造)
所以当Capacity是0时,我们为List添加了第一个项目后,Capacity是多少呢?
对,是A_VALUE_YOU_CANNOT_SURE。
不过,在.NET2.0和.NET4.5中,这个值看上去都是4。

System.Diagnostics.Debug.WriteLine(string.Format("default capacity is : {0}", new List<string>().Capacity));
int initCapacity = 0;
List<string> l = new List<string>(initCapacity);
System.Diagnostics.Debug.WriteLine(string.Format("constructe a list with capacity: {0}", l.Capacity));
for (int u = 0; u < 65; ++u)
{
System.Diagnostics.Debug.WriteLine(string.Format("Count: {0}, Capacity: {1}", l.Count, l.Capacity));
//l.TrimExcess();
//System.Diagnostics.Debug.WriteLine(string.Format(" TrimExcess() -> Count: {0}, Capacity: {1}", l.Count, l.Capacity));
l.Add("1");
}

输出
default capacity is :
constructe a list with capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
Count: , Capacity:
TrimExcess()
TrimExcess()的意思就是,如果Capacity大于Count,清掉哪些没有使用的空间。基本上可以理解成让Capacity等于Count,只是基本上,不能信赖这一点。.NET毕竟还要考虑很多性能问题。TrimExcess method does nothing if the list is at more than 90 percent of capacity——这就是.NET的方式。实际上把上面那段代码中的注释放开,就会看到确实存在Capacity和Count不等的情况(然而,并不是90%哟)。Capacity不够以后的增长规则,仍然是*2,并不会因为被Trim过就只是加1。
放开注释后的输出
default capacity is :
constructe a list with capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
发现并不是90%以后
System.Diagnostics.Debug.WriteLine(string.Format("default capacity is : {0}", new List<string>().Capacity));
int initCapacity = ;
List<string> l = new List<string>(initCapacity);
System.Diagnostics.Debug.WriteLine(string.Format("constructe a list with capacity: {0}", l.Capacity));
int initCount = ;
for (int u = ; u < initCount; ++u)
{
l.Add(u.ToString());
}
for (int u = ; u < initCount; ++u)
{
System.Diagnostics.Debug.WriteLine(string.Format("Count: {0}, Capacity: {1}", l.Count, l.Capacity));
l.TrimExcess();
System.Diagnostics.Debug.WriteLine(string.Format(" TrimExcess() -> Count: {0}, Capacity: {1}", l.Count, l.Capacity));
l.Remove(u.ToString());
}
得到
default capacity is :
constructe a list with capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
Count: , Capacity:
TrimExcess() -> Count: , Capacity:
貌似条件是酱紫的
if( count<(int)Math.Floor((double)capacity*0.9) )
do trim
linq之Capacity(转载)的更多相关文章
- linq to sql转载
LINQ简介 LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库 ...
- 30分钟LINQ教程 【转载】
原文地址:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有 ...
- 转载有个小孩跟我说LINQ(重点讲述Linq中GroupBy的原理及用法)
转载原出处: http://www.cnblogs.com/AaronYang/archive/2013/04/02/2994635.html 小孩LINQ系列导航:(一)(二)(三)(四)(五)(六 ...
- 【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD
[转载]ADO.NET与ORM的比较(3):Linq to SQL实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate ...
- 转载一篇文章:LINQ TO SQL 大全
https://www.cnblogs.com/chenwolong/p/lts.html 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河 ...
- linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)
在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable 需引用using System.Reflection; publ ...
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- LINQ to SQL更新数据库操作(转载)
使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...
- 转载linq to sql 的详解
[转]LINQ To SQL 语法及实例大全 2011-11-26阅读38651 评论9 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL ...
随机推荐
- React基础篇 (1)-- render&components
render 基础用法 //1.创建虚拟DOM元素对象 var vDom=<h1>hello wold!</h1> //2.渲染 ReactDOM.render(vDom,do ...
- php代码审计6审计xss漏洞
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的html代码,从而盗取用户资料,利用用户身份进行某种动作或者对 ...
- 基于SSH协议clone GitHub远端仓库到本地-git
经常逛 GitHub 的可能都知道,在 clone 远端仓库的时候,会有两个选项,如下图: 首先我们来说明一下两种方式的区别. 使用 HTTPS url 克隆对初学者来说会比较方便,复制HTTPS u ...
- Javascript 上传文件到Azure存储
对一些前端工程师来讲,使用javascript上传文件到Azure存储中可能是需要掌握的技能,希望这篇博客能给到帮助. 在开始前我们需要了解以下几点: 共享访问签名(Shared Access Sig ...
- fiddler使用——配置抓取https,出现提示“禁用解密”“单击配置”
自己在设置fiddler抓https的时候,浏览器总是提示:此证书不受信任:中午没午睡下午一直昏沉沉的,弄了好久,终于想起来是证书的问题:度娘有个不错的答案,这里分享一下!给以后有相同问题的朋友,也同 ...
- 航天独角兽Spacex
2018年2月7日下午3时45分,猎鹰重型火箭在位于卡纳维拉尔角的肯尼迪航天中心LC-39A平台顺利升空.火箭直升云霄,按照既定轨道持续升空,位于美国弗罗里达州卡纳维拉尔角的航天发射中心硝烟四起,非常 ...
- SQL 判断Null
字段 is null 这是多久没写SQL 了啊....................
- TX2 上使用opencv 调用板载mipi摄像头
使用命令测试 gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, fo ...
- springcloud微服务总结 zuul
一 springcloud网关组件理解: 为什么需要网关呢? 我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先 ...
- Android 多个界面(Activity)
1.介绍 2.相关属性 (1)启动Activity (2)Intent介绍 (3)关闭Activity 3.多个页面之间传递数据(页面1向页面2传递数据,单向传递数据) (1)相关属性 注意:data ...