为什么总是应该考虑给定 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> ...
随机推荐
- 使用 Loki 搭建个人日志平台
文章转载自:https://blog.kelu.org/tech/2020/01/31/grafana-loki-for-logging-aggregation.html 背景 Loki的第一个稳定版 ...
- Java SpringBoot 项目构建 Docker 镜像调优实践
PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...
- Python解释器路径寻找规则
Python编辑器路径寻址总结 Python编程优化 这场表演邀请了三位角色:run.sh.main.py.path.sh,拍摄场地选在了 Windows -> Git Bash 群演1号 ru ...
- SCI论文写作指南
目录 科技论文的特点 时态的使用 论文的逻辑结构 作者 选择期刊 写作 Title/论文题名 题名 题名的作用 题名基本要求 作者 作者姓名的拼音表达方式 作者单位名与地址的标署 摘要的写作与关键词 ...
- 安装 Ubuntu 教程
1.选择中文安装 2.****到了如下界面,我们点击继续: 3.然后点击,现在安装: 4.****到了这界面,点击继续: 5.如下,输入你的位置,随便输入就好: 6.****然后选择汉语,点击继续: ...
- 研发效能之技术治理&技术治理架构师
最近很多公司专门设置了一个职位叫「技术治理架构师」,主要负责公司技术治理相关事宜.这是个非常有意思的职位.技术治理的活,之前我们也是做的,只是没有提的这么明确,一般都是研发效能团队.PMO.架构团队. ...
- Tubian-Win上线!Tubian官方的Windows软件适配项目
Sourceforge.net下载:https://sourceforge.net/projects/tubian/ 123网盘下载: https://www.123pan.com/s/XjkKVv- ...
- C#-9 委托
一 什么是委托 可以认为委托是持有一个或多个方法的对象.可以执行委托,执行时委托会执行它所持有的方法. 从C++的角度理解,委托可以看成一个类型安全.面向对象的C++函数指针. delegate vo ...
- python渗透测试入门——取代netcat
1.代码及代码讲解. 实验环境:windows10下的linux子系统+kali虚拟机 import argparse import socket import shlex import subpro ...
- react的组件通信
react的组件通信 1.父组件传子组件 import React, {Component} from 'react'class Father extends Component{ render() ...