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 = ;
List<string> l = new List<string>(initCapacity);
System.Diagnostics.Debug.WriteLine(string.Format("constructe a list with capacity: {0}", l.Capacity)); for (int u = ; u < ; ++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("");
}

输出

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

我也不知道我要干嘛

List的Capacity的更多相关文章

  1. 大数据之Yarn——Capacity调度器概念以及配置

    试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...

  2. Hadoop Capacity Scheduler源码实现剖析

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/09/13/had ...

  3. Sizing and Capacity Planning for SharePoint 2013 - Resources

    http://blogs.msdn.com/b/sanjaynarang/archive/2013/04/06/sizing-and-capacity-planning-for-sharepoint- ...

  4. 用了skin皮肤控件之后,报错:容量超出了最大容量 参数名:capacity

    http://blog.csdn.net/keenweiwei/article/details/7403869 用了皮肤控件之后,报错:容量超出了最大容量 参数名:capacity MessageBo ...

  5. Capacity Scheduler 队列设置

    先附一个官网地址 Capacity Scheduler是YARN中默认的资源调度器. 相关参数配置: 资源分配相关参数 ``` (1) capacity:队列的资源容量(百分比). 当系统非常繁忙时, ...

  6. STL:string 大小(Size)和容量(Capacity)

    strings存在三种“大小”: 1.size()和length() 返回string中现在的字符个数.上述两个函数等效. 成员函数empty()用来检验字符数是否为0,亦即字符串是否为空.你应该优先 ...

  7. hdu 1839 Delay Constrained Maximum Capacity Path 二分/最短路

    Delay Constrained Maximum Capacity Path Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu. ...

  8. Web Capacity Analysis Tool 压力测试工具使用笔记

    一.背景介绍 Web Capacity Analysis Tool是微软轻量级Web压力测试工具, 早先是IIS 6.0Resource Tool kit 工具包中的一个组件,现在独立出来有一个社区版 ...

  9. max_size, capacity and size 的区别

    The max_size() function returns the maximum number of elements that the container can hold. The max_ ...

随机推荐

  1. Centos配置国内yum源

    网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到.具体设置方法如下 ...

  2. C语言程序设计第八次作业

    一.学习内容     本次课学习了一维数组的基本知识,需要大家对如下知识点进行总结:     1. 数组的定义,数组元素的引用,数组的初始化和赋值.     2. 明确以下问题:能否给数组名赋值?为什 ...

  3. Eclipse下.project和.classpath作用(转)

    classpath作用 定义项目的结构,如src.output.con.lib等. 源文件的具体位置(kind="src") 运行的系统环境(kind="con" ...

  4. Hadoop YARN中内存的设置

    在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离.R ...

  5. 【笔记】ListView的使用

    1.0 ListView三要素 1.0.1  创建基本步骤 1.在布局文件中创建一个ListView组件,并在Activity中声明这个组件. 2.在Activity中,创建一个合适的Adapter. ...

  6. sudo apt-get install apache2 php7.0 php7.0-mysql mysql-server

    sudo apt-get install apache2 php7.0 php7.0-mysql mysql-server sudo apt-get install libapache2-mod-ph ...

  7. Record:Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView

    Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView   The post "Im ...

  8. 手动刷新magento的索引管理方法

    当我们网站商品很多的时候,比如有几千件,我们刷新Magento的索引管理(Index Management)经常会失败.那么后台刷新不了,我们还可以通过命令行来刷新. 使用命令行来刷新索引管理会极大降 ...

  9. Gulp构建前端自动化项目

    类似于Grunt,gulp是另一个同样功能很强大的前端项目自动化利器. 下面是项目的效果:

  10. C语言内存分区

    在C/C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.     栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变 ...