讲师中心 微信公众号
AI工具推荐 视频效率加速

c# 数组和list哪个性能好

冬萱姑娘_6646

冬萱姑娘_6646

发布时间:2026-02-22 10:29:02

|

330人浏览过

|

来源于php中文网

原创

数组初始化快于默认List,预设容量后性能持平;数组直接分配连续内存,比new List<int>()快约40%,但预设容量后差距消失。

c# 数组和list哪个性能好

没有绝对“哪个性能好”,只有“在什么场景下谁更合适”——选错类型,性能可能差3–5倍。

初始化和填充:数组快,但List预设容量后几乎持平

数组直接分配连续内存,初始化速度约比默认构造的 List<T> 快40%。但这是指 new List<int>() 这种没给容量的情况。一旦你预设了容量,差距就消失了:

int size = 1_000_000;
// 数组:最快
int[] array = new int[size];
for (int i = 0; i < size; i++) array[i] = i;

// List:加 capacity 后,性能逼近数组
List<int> list = new List<int>(size); // 关键!避免内部多次扩容
for (int i = 0; i < size; i++) list.Add(i);
  • 不设 capacity:100万次 Add 可能触发 20+ 次扩容复制,拖慢整体速度
  • 设了 capacity:内存一次到位,Add 变成纯赋值,开销极小
  • 如果数据量完全未知(比如流式读取),数组根本不适用,别硬扛

随机访问(如 for 循环遍历、取第N个元素):两者基本一样快

因为 List<T> 底层就是数组,list[i] 最终也是指针偏移访问。JIT 优化后,差异通常在纳秒级,可忽略。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 但数组有更强的缓存局部性,超大集合(如图像像素处理)中,连续访问时数组仍略优
  • List<T> 多一层边界检查和方法调用,不过现代 .NET 已高度内联,实际影响微乎其微
  • 别为了这点差异把业务逻辑改成数组——可读性和维护成本更重要

插入/删除中间元素:List赢麻了,数组根本没法比

在索引 50 万处插入一个元素:array 必须新建数组 + 复制前后所有元素(O(n));而 List<T> 内部自动处理位移,实测快 3–5 倍。

  • array 插入 = 手动 Array.Copy + 新建数组 → 容易写错、GC 压力大
  • List<T>.Insert(500000, value) 一行搞定,语义清晰
  • 如果真要高频中间插入/删除,且长度固定,考虑 LinkedList<T>;但注意它牺牲了随机访问能力

什么时候必须用数组?什么时候该无脑选List?

真实项目里,90% 的“容器选择”其实早有答案:

  • 用 int[] / byte[]:图像处理、序列化缓冲区、高性能计算、与非托管代码交互(P/Invoke)、Span<T> 源头
  • 用 List<T>:业务列表(用户订单、搜索结果)、需要 Add/Remove/Find/Sort 的场景、DTO 层集合属性、EF Core 查询结果
  • 别纠结“性能更好”的幻觉——如果瓶颈真在容器访问上,大概率是算法或IO问题,不是换数组就能解决的

最容易被忽略的一点:不是“数组 vs List”,而是“是否做了容量预估”“是否用了 Span<T> 或 Memory<T> 替代”“是否在热路径里反复创建新集合”。这些细节,比选类型重要得多。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6419

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3125

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4028

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2765

2025.08.29

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

359

2026.04.23

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

5996

2023.08.14

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn