为什么总是应该考虑给定 List 的初始大小
在 .Net 技术中,使用 List<> 来存储数据是很常见的。List<> 是一个可以动态增长的泛型集合类型,可以存储任何类型的数据。
但是,在实际使用中,很多人并不注意给定 List<> 的初始大小,导致在数据量较大时,List<> 的性能可能不尽如人意。
代码示例
下面,我们以一个简单的代码示例来说明为什么应该考虑给定 List<> 的初始大小。
假设我们要存储 100 万个整数,不考虑初始大小的情况下,我们的代码可能如下:
var numbers = new List<int>(); |
上面的代码在执行时,会依次往 List 中添加 100 万个整数。但是,如果你运行该代码,你会发现它的执行速度很慢,而且内内存占用也很大。
为了解决这个问题,我们可以在实例化 List<> 的时候,指定它的初始大小。这样做的好处在于,List<> 在扩容的时候,就不需要按照默认的算法(通常是原来的容量的一倍)进行扩容,而是使用我们设定的初始大小。这样可以避免内存占用过多,提升 List<> 的执行效率。
如果我们指定 List<> 的初始大小为 100 万,那么代码如下:
var numbers = new List<int>(1000000); |
上面的代码执行效率会比不考虑初始大小的情况下要高得多。
当然,这并不意味着你每次使用 List<> 的时候都要指定它的初始大小。如果你的数据量不是很大,或者你不太关心性能,那么不指定初始大小也没有什么问题。
但是,如果你希望提高代码的执行效率,或者你的数据量非常大,那么你应该考虑指定 List<> 的初始大小。这样,你的代码执行效率会更高,内存占用也会更少。
使用建议
如果你要使用 List<> 存储数据,我们建议你在实际开发中遵循以下几条原则:
- 如果你的数据量不是很大,或者你不太关心性能,那么可以不指定 List<> 的初始大小。
- 如果你的数据量较大,并且希望提高代码的执行效率,那么可以考虑指定 List<> 的初始大小。这样可以避免在运行时动态增长内存,提高代码的执行速度。
- 如果你不确定你的数据量会有多大,那么可以考虑指定一个合理的初始大小。这样,当数据量较大时,List<> 可以在初始大小的基础上继续增长,避免内存不足的情况。
总结
总之,指定 List<> 的初始大小对于提高代码的执行效率和内存占用有很大的好处。如果你的数据量较大,或者你希望提高代码的性能,那么应该考虑指定 List<> 的初始大小。
参考资料
以上参考资料提供了有关 List<> 的更多信息,包括 List<> 的用法、泛型集合类型的基础知识等。希望可以为你提供帮助。
希望本文能对你有所帮助。感谢你的阅读。
本文采用 Chat OpenAI 辅助注水浇筑而成,如有雷同,完全有可能。
- 本文作者: newbe36524
- 本文链接: https://www.newbe.pro/ChatAI/Why-set-the-initial-capacity-of-List/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
为什么总是应该考虑给定 List 的初始大小的更多相关文章
- SQL Server 如何设置数据库的默认初始大小和自动增长大小
我们在SQL Server中新建数据库的时候,可以选择数据库文件及日志文件的初始大小.自动增长大小和最大大小,如下图所示: 可以通过设置更改数据库初始大小.自动增长大小和最大大小: 但是其实在SQL ...
- echarts图表初始大小问题及echarts随窗口变化自适应
最近在做一个轮播图,使用的是element的Carousel走马灯,每一个走马灯里是eachrts图,开始页面加载的时候发现echarts图并不能自适应,开始以为是走马灯的问题,后来发现不是 不知道大 ...
- Qt设置窗口的初始大小(使用sizeHint这个虚函数,或者在构造函数里使用resize函数)
我们用qt创建一个窗口,先后显示它,代码如下: class Mywindow : public QMainWindow{ ..... } int main( int argc, char** argv ...
- JVM参数最佳实践:元空间的初始大小和最大大小
本文阅读时间大约4分钟. JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Meta ...
- .NET性能优化-你应该为集合类型设置初始大小
前言 计划开一个新的系列,来讲一讲在工作中经常用到的性能优化手段.思路和如何发现性能瓶颈,后续有时间的话应该会整理一系列的博文出来. 今天要谈的一个性能优化的Tips是一个老生常谈的点,但是也是很多人 ...
- WTL 设置 SDI 主窗口初始大小的方法
在窗口创建之前添加一段代码 一般窗口创建函数为 wndMain.CreateEx(); 在此函数前添加 1: RECT rect = {x, y, width, height}; 然后将创建窗口函数改 ...
- Java堆初始大小的建议值
摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...
- 编写Java程序,随机给定一个数字猜大小
返回本章节 返回作业目录 需求说明: 由系统随机生成一个1~100之间的整数. 通过控制台一直输入一个整数,比较该数与系统随机生成的那个数,如果大就输出"猜大了.",继续输入:如果 ...
- SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的
当你在SqlServer创建数据库的时候可以指定数据库文件的初始大小,比如下图中我们将新创建的数据库MyDB的大小设置成了1024MB 那么你建好的数据库的确也就会占用1024MB左右的磁盘空间 不过 ...
- 为什么HashMap初始大小为16,为什么加载因子大小为0.75,这两个值的选取有什么特点?
先看HashMap的定义: public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V> ...
随机推荐
- C语言下for循环的一点技巧总结
for循环是普遍应用与各种计算机语言的一种循环方式. 一般情况下, for循环规则:for(条件一:条件二:条件三) 条件一为满足条件,也就是条件一为1时,进入这个for循环.条件二为循环条件,也就是 ...
- 洛谷P3243 [HNOI2015]菜肴制作 (拓扑排序/贪心)
这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的.但这种正向找是错误的,题目要求的是小的节点尽量 ...
- 2022.2.26A组总结&反思
今天的发挥比较奇妙.. T1:一眼dp+高斯消元,但是感觉细节比较多,然后先去做了T2,写完后回来推了一下就做出来了.比较裸,但是细节确实多,但是很可惜的一点是最后提交的代码没有判不合法,到手的100 ...
- redis bitmap数据结构之java对等操作
在之前的文章中,我们有说过bitmap,bitmap在很多场景可以应用,比如黑白名单,快速判定,登录情况等等.总之,bitmap是以其高性能出名.其基本原理是一位存储一个标识,其他衍生知道咱就不说了, ...
- laravel config()获取null
常规开发获取config值的是否发现获取值为null找了下文档,发现laravel是要把config注册到$app里面. 找到这个目录.加入这一行.就可以了
- Linux系统管理_磁盘管理——敬请期待!!!
df 显示磁盘空间使用情况 -a 全部文件系统列表 -h 以方便阅读的方式显示 -T 列出文件系统类型 du 查看目录和文件的磁盘空间使用情况 -a 显示目录中所有文件大小 -h 以易读方式显示文件大 ...
- [WPF] 抄抄超强的苹果官网滚动文字特效实现
1. 前言 今天 ChokCoco 大佬发布了一篇博客 超强的苹果官网滚动文字特效实现,iPhone 我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手实现了一个 ...
- SQL Server-表结构的操作
1.修改表的字段的数据类型 alter table [File_Info] alter column Upload_Request_ID nvarchar(14) not null 2.添加表的字段并 ...
- html和php里引用文件
html里引入css文件: <link href="base.css" rel="stylesheet" type="text/css" ...
- Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...