架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 365|回复: 1

[资料] .NET/C# 高性能将多个文件合并成一个文件

[复制链接]
发表于 2024-2-14 12:04:26 | 显示全部楼层 |阅读模式
需求:在使用大文件分块上传的时候,后端需要将不同块按照顺序合并成一个文件,或者在切割归档文件的时候,将切割后的文件合并成源文件。

Linux 使用 split 文件切割拆分
https://www.itsvse.com/thread-10716-1-1.html

首先,准备两个 100M 的文件进行测试,命令如下:

Windows 下创建指定大小的文件
https://www.itsvse.com/thread-10732-1-1.html

代码如下:


测试了两种不同的 merge 合并方案。如下图:

QQ截图20240214115101.jpg

使用 VS 2022 调试 -> 性能探查器 -> 勾选“.NET 对象分配跟踪”开始测试:

QQ截图20240214115614.jpg

merge1 总大小为:16,778,034,merge2 总大小为:164,270,通过总分配可以看出 merge1 比 merge2 分配大了 102 倍,越大证明性能越差

使用 PerfView 分别查看 CPU Stacks、GC Heap Net Mem Stacks 分析,如下图:

QQ截图20240214120224.jpg QQ截图20240214120121.jpg

备注:Inc%-包含成本表示为所有样本总成本的百分比(对于ROOT节点为100%)。可以按其进行排序。





上一篇:Windows 下创建指定大小的文件
下一篇:.NET 中 JIT 和 AOT 编译介绍和区别
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-2-14 12:09:30 | 显示全部楼层
使用 VS 2022 调试 -> 性能探查器 -> 勾选“内存使用率”进行测试:

  • merge1 执行的时候占用 808MB
  • merge2 执行的时候占用 12MB


QQ截图20240214120712.jpg QQ截图20240214120728.jpg

如果单独执行 merge2 方法,程序启动占用 6MB,在函数执行过程中以及完成后,程序始终占用 6MB。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 14:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表