为什么总是应该考虑给定 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> ...
随机推荐
- Elasticsearch:反向代理及负载均衡在 Elasticsearch 中的应用
文章转载自:https://elasticstack.blog.csdn.net/article/details/108365746
- HCIP-OSPF域间路由
链路类型: P2P:描述了对端链路信息和本端链路信息. (描述了从一台路由器到另外一台路由器之间点到点的链路信息,用来描述拓扑信息,P2P.P2MP) TransNET:描述了从一台路由器需要经过一个 ...
- 为什么数字化转型离不开 MES 系统?
确切的说应该是制造业企业的数字化转型离不开MES系统,原因很简单,制造业企业的核心工作是生产制造,做数字化转型就是对生产制造各个环节进行数字化改造,提质增效降成本,而MES系统是制造执行系统,是生产制 ...
- 用 VS Code 搞Qt6:使用 PySide 6
一般来说,用C++写 Qt 应用才是正宗的,不过,为了让小学生也能体验 Qt 的开发过程,或者官方为了增加开发者人数,推出了可用 Python 来编程的 Qt 版本.此版本命名比较奇葩,叫 PySid ...
- Codeforces Round #804 (Div. 2) C(组合 + mex)
Codeforces Round #804 (Div. 2) C(组合 + mex) 本萌新的第一篇题解qwq 题目链接: 传送门QAQ 题意: 给定一个\(\left [0,n-1 \right ] ...
- (数据科学学习手札145)在Python中利用yarl轻松操作url
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,在诸如网络爬虫.web应用开发 ...
- git 多个commit 如何合并
git 多个commit 如何合并 本篇主要介绍一下 git 中多个commit 如何合并, 因为commit 太多 会导致提交记录混乱, 所以有时候会把多个commit 合并成一个 保持提交记录干净 ...
- day02-HTML02
4.HTML 4.3HTML基本标签 4.3.9表格(table)标签 基本语法: <table border="边框宽度" cellspacing="空隙大小&q ...
- c++ 模板 指针类型偏特化
一步步来,先简单点. 目标:我们要实现一个模板类,例化后,可以通过get_val获取到值,通过get_ptr获取到指针.具体什么意思结合例子来看看吧. 例子: struct A{ int data; ...
- 研发效能|DevOps 已死平台工程永存带来的焦虑
最近某位大神在推特上发了一个帖子,结果引来了国内众多卖课机构.培训机构的狂欢,开始贩卖焦虑,其实「平台工程」也不是什么特别高深莫测的东西.闲得无聊,把这位大神的几个帖子薅了下来,你看过之后就会觉得没啥 ...