简介

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

那么,让我们开始吧。

作者:依乐祝

译文链接:https://www.cnblogs.com/yilezhu/p/15182566.html

原文链接:https://www.c-sharpcorner.com/article/using-the-ensurecapacity-method-in-c-sharp-lists-queues-and-stacks/

为什么以及何时使用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 值时必须非常小心。

总结

在本文中,我们研究了在C#10中对List集合使用EnsureCapacity方法,讨论了使用此方法的优点以及何时应该使用它。这同样适用于队列和堆栈集合。祝编码快乐!

C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能的更多相关文章

  1. 2017.10.28 针对Java Web应用中错误异常处理方法的运用

    针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...

  2. .NET中的Queue和Stack

    1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...

  3. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  4. 集合的概念 Stack和Queue Dictionary ArrayList和List<T>方法及用法

    Stack和stack<T>方法一样// 管理方式: 后进先出 LIFO 栈// Stack<string> s=new Stack<string>();//(放一 ...

  5. Scala 深入浅出实战经典 第39讲:ListBuffer、ArrayBuffer、Queue、Stack操作代码实战

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  6. 数据结构与算法(4) -- list、queue以及stack

    今天主要给大家介绍几种数据结构,这几种数据结构在实现原理上较为类似,我习惯称之为类list的容器.具体有list.stack以及queue. list的节点Node 首先介绍下node,也就是组成li ...

  7. deque、queue和stack深度探索(下)

    deque如何模拟连续空间?通过源码可以看到这个模型就是通过迭代器来完成. 迭代器通过重载操作符+,-,++,--,*和->来实现deque连续的假象,如上图中的 finish-start ,它 ...

  8. <s:property="a" value=""/>取的<s:debug></s:debug>中的value stack中的属性值

    <s:property="a"  value=""/>取的<s:debug></s:debug>中的value stack中 ...

  9. C# Queue 和Stack的实现

    Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出. 这里我主要关注其实现原理. queue的实现如下: public class Queue<T> : IEnum ...

随机推荐

  1. chrome 屏蔽广告的利器

    Adblock Plus https://chrome.google.com/webstore/detail/adblock-plus/cfhdojbkjhnklbpkdaibdccddilifddb ...

  2. Louvain 论文笔记

    Louvain Introduce Louvain算法是社区发现领域中经典的基于模块度最优化的方法,且是目前市场上最常用的社区发现算法.社区发现旨在发现图结构中存在的类簇(而非传统的向量空间). Al ...

  3. 职场人都该了解<荷花定律>

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 荷花定律 ,听起来很新奇的一个 ...

  4. cke编辑器插入&ZeroWidthSpace占位字符的问题记录

    背景 本博文主要记录在使用cke编辑器时,遇到的一系列的问题 问题1:在执行某些业务操作后,编辑器会偶现在页面头部或者尾部插入&ZeroWidthSpace占位符(编辑器好像就爱干这事~) 解 ...

  5. 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景

    滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...

  6. 【Git】pull遇到错误:error: Your local changes to the following files would be overwritten by merge:

    这种情况下,如何保留本地的修改同时又把远程的合并过来呢? 首先取决于你是否想要保存本地修改.(是 /否) 是 git stash git pull origin master git stash po ...

  7. ADB命令 连接WIFI检测序列号

    利用ADB 电脑与手机相连 查看序列号: adb shell  getprop ro.serialno 查看机器的SN号 adb shell getprop 查看机器的全部信息参数 查看IP地址: a ...

  8. [刘阳Java]_Java基础面试中的常识问题

    1. anonymous inner class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 不行,对于匿名内部类,看到的一句话 ...

  9. ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

    前言 在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的? 并发加锁 先来看结果,在多线程对 /locks/lock_01 加锁时,是在后面又创建了新的临时节点. ...

  10. CentOS下 Django部署 nginx+uWSGI+Django(二)

    该篇内容承接CentOS下 Django部署 uWSGI+Django(一),细节流程可参考此篇内容. 1. 当前系统 CentOS Linux release 7.6.1810 Python 2.7 ...