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 ...
随机推荐
- servlet-mysql实现简单用户登录注册
环境:IDEA Maven 效果截图: 项目结构: 类说明: ConnectionUtil:负责数据库连接和释放 UserDao:数据库增删改查操作 User:用户Bean,只用注册和登录的话可以不要 ...
- 【ARC083E】Bichrome Tree 树形dp
Description 有一颗N个节点的树,其中1号节点是整棵树的根节点,而对于第ii个点(2≤i≤N)(2≤i≤N),其父节点为PiPi 对于这棵树上每一个节点Snuke将会钦定一种颜色(黑或白), ...
- vim文本编辑
6.1 vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode). 6. ...
- win10在CMD操作MySQL时中文显示乱码
根据网上说明直接修改数据库各种的字符集没有效果,后来经过测试发现需要先更换至旧版CMD才行. 具体总流程如下: 1.在边框栏上右键,打开属性栏. 2.选择“使用旧版控制台” 3.重启CMD,并设置字符 ...
- PHP批量给目录下所有的文件转换编码
代码如下: function tree(&$arr_file, $directory, $dir_name=''){ $mydir = dir($directory); ...
- [FJOI2017]矩阵填数
[Luogu3813] [LOJ2280] 写得很好的题解 \(1.\)离散化出每一块内部不互相影响的块 \(2.\)\(dp[i][j]\)为前 \(i\) 种重叠块其中有 \(j\) 这些状态的矩 ...
- Django-admin 的使用
admin 组件的使用 Django 提供功能十分强大的后台管理组件 admin 来实现自动管理. admin 是一个组件,与 APP 一样,项目启动一开始就加载了.在 setting.py 中的 I ...
- ui-grid使用详解
HTML <pre name="code" class="html"><!--ui-grid css--> <link rel=& ...
- iptables 深入分析
四表五链四表:filter , nat, manager, raw五链: 五个HOOK点的链接,pre_rout, foward, post_rout, in ,out 问题:内核如何匹配,内核使能 ...
- 【Python】小括号过滤后的盲注
0x00 环境搭建 sqli-labs第八关,简单修改下源代码,加入下面一行代码 $id=preg_replace('/\(|\)/', "",$id); //过滤小括号 0x ...