在 .Net 技术中,使用 List<> 来存储数据是很常见的。List<> 是一个可以动态增长的泛型集合类型,可以存储任何类型的数据。

但是,在实际使用中,很多人并不注意给定 List<> 的初始大小,导致在数据量较大时,List<> 的性能可能不尽如人意。

代码示例

下面,我们以一个简单的代码示例来说明为什么应该考虑给定 List<> 的初始大小。

假设我们要存储 100 万个整数,不考虑初始大小的情况下,我们的代码可能如下:

var numbers = new List<int>();
for (int i = 0; i < 1000000; i++)
{
numbers.Add(i);
}

上面的代码在执行时,会依次往 List 中添加 100 万个整数。但是,如果你运行该代码,你会发现它的执行速度很慢,而且内内存占用也很大。

为了解决这个问题,我们可以在实例化 List<> 的时候,指定它的初始大小。这样做的好处在于,List<> 在扩容的时候,就不需要按照默认的算法(通常是原来的容量的一倍)进行扩容,而是使用我们设定的初始大小。这样可以避免内存占用过多,提升 List<> 的执行效率。

如果我们指定 List<> 的初始大小为 100 万,那么代码如下:

var numbers = new List<int>(1000000);
for (int i = 0; i < 1000000; i++)
{
numbers.Add(i);
}

上面的代码执行效率会比不考虑初始大小的情况下要高得多。

当然,这并不意味着你每次使用 List<> 的时候都要指定它的初始大小。如果你的数据量不是很大,或者你不太关心性能,那么不指定初始大小也没有什么问题。

但是,如果你希望提高代码的执行效率,或者你的数据量非常大,那么你应该考虑指定 List<> 的初始大小。这样,你的代码执行效率会更高,内存占用也会更少。

使用建议

如果你要使用 List<> 存储数据,我们建议你在实际开发中遵循以下几条原则:

  • 如果你的数据量不是很大,或者你不太关心性能,那么可以不指定 List<> 的初始大小。
  • 如果你的数据量较大,并且希望提高代码的执行效率,那么可以考虑指定 List<> 的初始大小。这样可以避免在运行时动态增长内存,提高代码的执行速度。
  • 如果你不确定你的数据量会有多大,那么可以考虑指定一个合理的初始大小。这样,当数据量较大时,List<> 可以在初始大小的基础上继续增长,避免内存不足的情况。

总结

总之,指定 List<> 的初始大小对于提高代码的执行效率和内存占用有很大的好处。如果你的数据量较大,或者你希望提高代码的性能,那么应该考虑指定 List<> 的初始大小。

参考资料

以上参考资料提供了有关 List<> 的更多信息,包括 List<> 的用法、泛型集合类型的基础知识等。希望可以为你提供帮助。

希望本文能对你有所帮助。感谢你的阅读。

本文采用 Chat OpenAI 辅助注水浇筑而成,如有雷同,完全有可能。

为什么总是应该考虑给定 List 的初始大小的更多相关文章

  1. SQL Server 如何设置数据库的默认初始大小和自动增长大小

    我们在SQL Server中新建数据库的时候,可以选择数据库文件及日志文件的初始大小.自动增长大小和最大大小,如下图所示: 可以通过设置更改数据库初始大小.自动增长大小和最大大小: 但是其实在SQL ...

  2. echarts图表初始大小问题及echarts随窗口变化自适应

    最近在做一个轮播图,使用的是element的Carousel走马灯,每一个走马灯里是eachrts图,开始页面加载的时候发现echarts图并不能自适应,开始以为是走马灯的问题,后来发现不是 不知道大 ...

  3. Qt设置窗口的初始大小(使用sizeHint这个虚函数,或者在构造函数里使用resize函数)

    我们用qt创建一个窗口,先后显示它,代码如下: class Mywindow : public QMainWindow{ ..... } int main( int argc, char** argv ...

  4. JVM参数最佳实践:元空间的初始大小和最大大小

    本文阅读时间大约4分钟. JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Meta ...

  5. .NET性能优化-你应该为集合类型设置初始大小

    前言 计划开一个新的系列,来讲一讲在工作中经常用到的性能优化手段.思路和如何发现性能瓶颈,后续有时间的话应该会整理一系列的博文出来. 今天要谈的一个性能优化的Tips是一个老生常谈的点,但是也是很多人 ...

  6. WTL 设置 SDI 主窗口初始大小的方法

    在窗口创建之前添加一段代码 一般窗口创建函数为 wndMain.CreateEx(); 在此函数前添加 1: RECT rect = {x, y, width, height}; 然后将创建窗口函数改 ...

  7. Java堆初始大小的建议值

    摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...

  8. 编写Java程序,随机给定一个数字猜大小

    返回本章节 返回作业目录 需求说明: 由系统随机生成一个1~100之间的整数. 通过控制台一直输入一个整数,比较该数与系统随机生成的那个数,如果大就输出"猜大了.",继续输入:如果 ...

  9. SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的

    当你在SqlServer创建数据库的时候可以指定数据库文件的初始大小,比如下图中我们将新创建的数据库MyDB的大小设置成了1024MB 那么你建好的数据库的确也就会占用1024MB左右的磁盘空间 不过 ...

  10. 为什么HashMap初始大小为16,为什么加载因子大小为0.75,这两个值的选取有什么特点?

    先看HashMap的定义: public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V> ...

随机推荐

  1. ELK 性能优化实践

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI5MTU1MzM3MQ==&mid=2247489814&idx=1&sn=6916f8b7 ...

  2. [基础]VS Code 基础操作 命令符

    一.五种运行方式 1.点击IIS Express运行 实际上它开的是一个IIS Express服务器,就是说有一个小的代理服务器帮咱们运行,运行后就会启动一个IIS Express小型服务器,启动之后 ...

  3. [题解] Atcoder AGC 005 F Many Easy Problems NTT,组合数学

    题目 观察当k固定时答案是什么.先假设每个节点对答案的贡献都是\(\binom{n}{k}\),然后再减掉某个点没有贡献的选点方案数.对于一个节点i,它没有贡献的方案数显然就是所有k个节点都选在i连出 ...

  4. springmvc 上传文件时的错误

    使用springmvc上传文件一直失败,文件参数一直为null, 原来是配置文件没写成功. <bean id="multipartResolver" class=" ...

  5. Azure Kubernetes(AKS)部署及查看应用资源

    简介 上一篇文章讲解了如何使用Azure DevOps持续部署应用到Azure Kubernetes上.但是部署是否成功?会不会遇到什么问题?项目运行中是否会出现问题?我们该怎么样查看这些问题,并且对 ...

  6. Response对象页面重定向、时间的动态显示

    Response对象 response对象主要用于对客户端的请求进行回应,将web服务器处理后的结果发回给客户端,封装了jsp产生的响应,并发送到客户端响应客户端的请求,请求的数据可以是各种数据类型, ...

  7. git 多个commit 如何合并

    git 多个commit 如何合并 本篇主要介绍一下 git 中多个commit 如何合并, 因为commit 太多 会导致提交记录混乱, 所以有时候会把多个commit 合并成一个 保持提交记录干净 ...

  8. k8s集群正常kubectl用不了

    今天有个客户反馈k8s集群服务正常,业务也正常.kubectl get no敲入这个命令就有夯住了 仔细去检查配置发现少了一个config 最后在master-2上的config文件cp拷一份过来问题 ...

  9. Linux之Docker-01

    一.镜像基础命令 1.docker version  [root@DY-Ubuntu-01 ~]#docker version               #查看 Docker 版本 2.docker ...

  10. Element Ui 安装以及配置

    npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用. npm i element-ui -S 引入 Element 你可以引入整个 Element,或是根据需要 ...