简介

List、Queue 和 Stack 集合中的 EnsureCapacity方法预设数组大小。

为什么以及何时使用EnsureCapacity 方法

这里我们将首先了解为什么需要使用这种方法以及何时使用。在 List、Queue 和 Stack内部使用的是数组来表示集合。每次我们向这些集合添加更多项时,我们都需要增加这个内部数组的大小。因此,会发生调整大小的操作。由于数组大小进行了调整,因此这是一个性能损失。在我们知道此数组的最大大小或假设我们知道将存储在我们的 List、Queue 或 Stack 集合中的最大元素数量的情况下,我们可以使用EnsureCapacity 方法预设大小。这将确保最初设置此大小,并且不会调整内部数组的大小,因此我们获得了性能提升。让我们在测试应用程序中实现它,

创建一个控制台应用程序来测试EnsureCapacity 方法

我们将首先在 Visual Studio 2022 社区版中创建一个 C# 控制台应用程序,如下所示,

用下面的代码替换 Program.cs 文件,

var list=new List<int>();
list.EnsureCapacity(5);
for(vari=0;i<5;i++){
list.Add(i);
Console.WriteLine(list[i]);
}
thisList.Add(5);
Console.WriteLine(list[5]);

当我们运行此代码时,我们会看到以下输出。

因此,我们看到即使超出了 EnsureCapacity 方法中定义的容量,我们仍然可以继续向列表中添加元素。然而,此时,内部数组又重新调整大小,我们失去了性能增益。这表明我们在设置EnsureCapacity 值时必须非常小心。

总结

基本上相当于之前的
var list=new List<int>(5);
或者
var list=new List<int>();
if (list.Capacity < 5) list.Capacity = 5;

鸣谢:

https://www.cnblogs.com/yilezhu/p/15182566.html

C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小的更多相关文章

  1. C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能

    简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...

  2. stl容器学习——queue,stack,list与string

    目录 头文件 string 目录部分 1.string的定义及初始化 ① 用一个字符串给另一个字符串赋值 ②用字符串常量对字符串进行赋值 ③ 用n个相同的字符对字符串赋值 2.string的运算符及比 ...

  3. 在向一个ArrayList中添加大量元素前,可以使用ensureCapacity方法来增加ArrayList的容量

    参考http://www.jianshu.com/p/f174d49b391c ensureCapacity(),该方法就是 ArrayList 的扩容方法.在前面就提过 ArrayList 每次新增 ...

  4. 堆(heap)、栈(stack)、方法区(method)

    JVM内存分为3个区:堆(heap).栈(stack).方法区(method) 1.堆(heap):存储的全部对象,每个对象有个与之对应的class信息.即通过new关键字和构造器创建的对象.JVM只 ...

  5. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. 让ar执行queryall和queryrow方法返回数组

    让ar执行queryall和queryrow方法返回数组 <?phpnamespace common\components;use \CActiveRecord;use \Yii;use \CD ...

  7. javascript小实例,多种方法实现数组去重问题

    废话不多说,直接拿干货! 先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先 ...

  8. C#面向对象的方法写数组的功能

    上一篇文章用Java方法写出了可以对数组执行的功能,然后在用实例化后的对象调用这些方法来实现这些功能: 这篇随笔改用C#语言实现同样的功能 方法类:Array using System; using ...

  9. C++ 数组作为函数参数时,传递数组大小的方法

    废话不多说,先上错误示范: void fun(int arr[arr_num]) { // ... } int main() { // ... int *arr = new int[10]; fun( ...

  10. Java基础知识强化85:System类之arraycopy()方法(数组拷贝)

    1. arraycopy方法(数组拷贝) public static void arraycopy(object src,int srcPos,Object dest,int destPos, int ...

随机推荐

  1. C# 前台线程 后台线程区别

    前台线程 会随进程一起结束 不管是否完成,后台线程需要执行完毕,进程才能结束 例子: class Program { static void Main(string[] args) { Thread ...

  2. ES6-新增方法

    一.字符串的新增方法 1.includes方法(实例的方法): 应用: 代码优化: (1)先使用includes方法判断是url中否包含? (2)如果包含?, 再判断url最后一位字符是不是?或&am ...

  3. docker 安装 elasticsearch7.6.2 kibana7.6.2

    [root@abcdefg bin]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6896f6e3202c ...

  4. mblink study111

    mblink study  https://gitee.com/dotnetchina/NanUIhttps://blog.csdn.net/u012814856/article/details/70 ...

  5. 怎么才能卸载inventor?完全彻底卸载删除干净inventor各种残留注册表和文件的方法和步骤

    怎么才能卸载inventor?完全彻底卸载删除干净inventor各种残留注册表和文件的方法和步骤.如何卸载inventor呢?有很多同学想把inventor卸载后重新安装,但是发现inventor安 ...

  6. 安装netbense时提示在此计算机中找不到Java SE开发工具包(JDK)

    在提示信息中显示的需要JDK8或更高版本,这边需要提醒大家不要把jdk8和jdk1.8弄混 首先大家打开控制面板找到程序并点击进去 点击程序和功能 在电脑上查看是否有java8或更高版本的内容如果没有 ...

  7. py13函数迭代器与生成器

    """什么是迭代器 迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 为什么要用 迭代器给你提供了一种不依赖于索引取值的方式 如何用 ...

  8. R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列

    全文链接:http://tecdat.cn/?p=31717 原文出处:拓端数据部落公众号 分析师:Ke Liu 随着金融市场全球化的发展,金融产品逐渐受到越来越多的关注,而金融产品的风险度量成为投资 ...

  9. 阿里云初始化,epel库,docker安装的一般步骤,和java8 升级 java11 的一些bug,无法显示验证码,等

    1. 反射异常 有些反射异常,不是自己代码的错而是一些框架调用的时候,所带来的,不好处理. 用压制输出的形式,1行为压制,2行为调试模式,输出所有的报错信息.这里用java.base / java.n ...

  10. Dynamics 365 登录后网页显示空白

    检查IIS的站点,身份验证,是否禁用了windows身份验证以及匿名身份认证:如果是,则启用