首页 > 编程语言 >C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小

C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小

时间:2022-08-22 18:55:24浏览次数:82  
标签:Queue C# List list EnsureCapacity 数组 大小

简介

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

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

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

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

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

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

用下面的代码替换 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]);

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

在 Cshaarp 列表、队列和堆栈中使用确保容量方法

因此,我们看到即使超出了 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

标签:Queue,C#,List,list,EnsureCapacity,数组,大小
From: https://www.cnblogs.com/yakniu/p/16613886.html

相关文章

  • elasticsearch安装(Windows)遇到的问题
    1、运行:/bin/elasticsearch.bat注意:9300为ElasticSearch集群间组件的通信端口,9200为浏览器访问的http协议RESTful端口;输入地址http://localhost:9200结果:访问失败!尚......
  • LeetCode 69. x 的平方根
    LeetCode69.x的平方根思路:浮点数二分修改版因为返回的是整数所以二分分三类讨论mid*mid==x该情况mid为x的平方根mid*mid>x该情况mid大于x的平方根mid......
  • nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
    第一步:查询ps-ef|grepnginx第二步:杀进程kill-QUITPID第三步:启动/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf ......
  • LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
    34.在排序数组中查找元素的第一个和最后一个位置思路:与AcWing789一致classSolution{public:vector<int>searchRange(vector<int>&nums,inttarget){......
  • [转]使用 exec 函数时需要注意的一些安全问题
    转载地址:https://www.ucloud.cn/yun/37950.html众所周知,在python中可以使用exec函数来执行包含python源代码的字符串:>>>code="""...:a="hello"...:......
  • When to use Include in EF? Not needed in projection?
    WhentouseIncludeinEF?Notneededinprojection?IhavethefollowinginEntityFrameworkCore:publicclassBook{publicInt32Id{get;set;}publ......
  • C#-队列 Queue/栈 Stack
    队列先进先出,相当于排队买车票//队列Queue<string>queueList=newQueue<string>();//入队queueList.Enqueue("张三");queueList.Enqueue("李四");queueList.En......
  • SCP和SFTP区别
    https://www.iteye.com/blog/wb8206656-2231060不管SCP还是SFTP,都是SSH的功能之一。都是使用SSH协议来传输文件的。不用说文件内容,就是登录时的用户信息都是经过SSH加......
  • rk3566 linux编译运行librga C++程序
    本文使用的是linuxaarch64版librga.so(1.3.2),来自https://github.com/airockchip/librga 运行环境:rk3566linux系统编译环境:ubuntu20.04gcc/g++9.4工具链:gcc-buildroot......
  • 结构体数组使用StructLinq
    .NET性能优化-为结构体数组使用StructLinq 前言本系列的主要目的是告诉大家在遇到性能问题时,有哪些方案可以去优化;并不是要求大家一开始就使用这些方案来提升性能。......