为什么总是应该考虑给定 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> ...
随机推荐
- [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论
前言 支持向量机(Support Vector Machine,SVM)在70年代由苏联人 Vladimir Vapnik 提出,主要用于处理二分类问题,也就是研究如何区分两类事物. 本文主要介绍支持 ...
- js基础知识--BOM
之前说过,在js的 运行环境为浏览器时,js就主要有三部分组成: ECMAScript核心语法.BOM.DOM.今天就和大家详细说一下BOM的一些基础知识. BOM BOM通常被称为浏览器对象模型,主 ...
- 某云负载均衡获取客户端真实IP的问题
某云负载均衡真实IP的问题,我们这边已经遇到过两次了.而且每次和售后沟通的时候都大费周折,主要是要给售后说明白目前文档的获取真实IP是有问题的,他们觉得文档上说明的肯定没问题,售后要是不明白,他们不会 ...
- Wine 安装迅雷5.8.14.176
测试过的系统版本:Kubuntu 22.04 测试过的Wine版本 Wine7.8 程序下载地址: https://pan.baidu.com/s/1pSgunVH3WtACssX5we3DdQ 提取 ...
- IDEA上关于 jstl导包的问题
IDEA上关于 jstl的问题 在 IDEA上使用 maven创建 web骨架项目,在 pom文件中添加 jstl依赖 <dependency> <groupId>jstl&l ...
- 华为交换机VLAN常用命令
划分vlan vlan 10 划分Vlan10 vlan batch 30 40 同时创建vlan30和40 dispaly vlan 查看vlan信息 int e0/0/1 进入某一个接口 port ...
- 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中。需要对提交的信息进行修改,信息填入不能为空,为空则则有提示。
jsp结合SQLSERVER向数据库中的表添加图书信息. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...
- 一键部署haproxy脚本
HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...
- xss学习笔记(萌新版)
xss简介 xss攻击者构造恶意信息然后在用户的浏览器上执行,主要分为反射性xss,这种主要是某个页面存在有漏洞的参数,然后填上恶意参数把整个链接发给用户或者管理员,他们点击了带有恶意参数的链接就会执 ...
- 第2-3-1章 文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 文件存储服务 1. 需求背景 2. 核心功能 3. 存储策略 3.1 本地存储 3.2 FastDFS存储 3.3 云存储 3.4 minio 4. 技术设计 文件存储服务 全套代码及资料全部完 ...