C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
简介
在今天的文章中,我们将介绍 C# 10 中引入的一项新功能。这是已添加到 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 值时必须非常小心。
总结
在本文中,我们研究了在C#10中对List集合使用EnsureCapacity方法,讨论了使用此方法的优点以及何时应该使用它。这同样适用于队列和堆栈集合。祝编码快乐!
C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能的更多相关文章
- 2017.10.28 针对Java Web应用中错误异常处理方法的运用
针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...
- .NET中的Queue和Stack
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在ArrayList中主要使用Add.Remove.RemoveAt.Insert四个方法对栈进行操作.Add方法 ...
- 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的无状态模 ...
- 集合的概念 Stack和Queue Dictionary ArrayList和List<T>方法及用法
Stack和stack<T>方法一样// 管理方式: 后进先出 LIFO 栈// Stack<string> s=new Stack<string>();//(放一 ...
- Scala 深入浅出实战经典 第39讲:ListBuffer、ArrayBuffer、Queue、Stack操作代码实战
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 数据结构与算法(4) -- list、queue以及stack
今天主要给大家介绍几种数据结构,这几种数据结构在实现原理上较为类似,我习惯称之为类list的容器.具体有list.stack以及queue. list的节点Node 首先介绍下node,也就是组成li ...
- deque、queue和stack深度探索(下)
deque如何模拟连续空间?通过源码可以看到这个模型就是通过迭代器来完成. 迭代器通过重载操作符+,-,++,--,*和->来实现deque连续的假象,如上图中的 finish-start ,它 ...
- <s:property="a" value=""/>取的<s:debug></s:debug>中的value stack中的属性值
<s:property="a" value=""/>取的<s:debug></s:debug>中的value stack中 ...
- C# Queue 和Stack的实现
Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出. 这里我主要关注其实现原理. queue的实现如下: public class Queue<T> : IEnum ...
随机推荐
- android开发相关知识笔记
1.xpage页面打开: openPage(TestFragment.class) openPage("标识") // 页面打开等待结果返回: openPageForResult( ...
- 如何处理RabbitMQ 消息堆积和消息丢失问题
消息堆积 解决方案: 增加消费者或后台相关组件的吞吐能力 增加消费的多线程处理 根据不同的业务实现不同的丢弃任务,选择不同的策略淘汰任务 默认情况下,RabbitMQ消费者为单线程串行消费,设置并行消 ...
- java基础---设计模式(3)
行为型模式 出处:http://blog.csdn.net/zhangerqing 行为型模式包括策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式 ...
- Linux下如何使用Rsync备份服务器重要数据
Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...
- 前端开发入门到进阶第五集【安装SublimeServer】
参考:https://www.cnblogs.com/jf-67/p/8031614.html 1.我们可以直接在sublime text里面安装,Ctrl+shift+p进入命令模式,输入insta ...
- 如何进行TIDB优化之Grafana(TiDB 3.0)关注监控指标
前言 在对数据库进行优化前,我们先要思考一下数据库系统可能存在的瓶颈所在之外.数据库服务是运行在不同的硬件设备上的,优化即通过参数配置(不考虑应用客户端程序的情况下),而实现硬件资源的最大利用化.那么 ...
- springboot+mybatis+mysql 利用mybatis自动生成sql语句
工具和环境 idea,mysql,JDK1.8 效果图如下 结构图如下 java resources sql文件 /* Navicat MySQL Data Transfer Source Serve ...
- 为什么要学习Netty?
一.传统的BIO编程 网络编程的基本模型是 Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的 IP 地址和监听端口),客户端通过连接操作向服务端监听 ...
- python序列化proto时对repeated修饰数据进行赋值(常用类型和其他类型)
说一下对proto文件中数据使用时的书写方法,因为笔者也经常弄混淆 一.repeated修饰符,该列表是常用类型,比如int message C2GS_GoodsList { repeated int ...
- Orchestrator+Proxysql 实现自动导换+应用透明读写分离
前面一篇博客我介绍了如何通过Orachestrator+脚本实现自动导换. 这一章,我来演示一下如何通过Orchestrator+Proxysql 实现自动导换+应用透明读写分离 总体架构 可选架构1 ...