gpt4 book ai didi

c# - 分配字节数组对性能至关重要吗?

转载 作者:太空狗 更新时间:2023-10-30 00:24:39 24 4
gpt4 key购买 nike

在我的小型文件传输网站(this one,运行 .NET 4.5.1)中,我正在关注 Microsoft 知识库文章 812406将先前上传的文件从服务器发送到浏览器。

做性能优化我很惊讶的发现那一行

var buffer = new byte[10000];

占用相当多的时间(我使用的是 Red Gate 的 ANTS Performance Profiler )。每个完整下载/客户端仅分配一次缓冲区。

我的问题:

  • 以这种方式和大小分配缓冲区是好的做法吗?
  • 关于分配 ≈10k 缓冲区的任何替代方案?

更新 1:

感谢您的评论,我发现内存也是在循环内分配的。

不过,ANTS Profiler 只标记循环外的分配 需要那么多时间,老实说我还不明白(还)。我已经删除了循环内的(无意义的)分配。

更新 2:

已实现建议的 BufferManager并将缓冲区大小从 10k 减少到 4096(以防万一......),我的网站从几天以来运行非常流畅。

最佳答案

是的。实际上,WCF uses a "buffer manager" to prevent this problem .

我一直在自己开发 network service ,在分析过程中,我发现 Byte[] 缓冲区的分配造成了瓶颈。不仅在分配期间,处理器在 GC 中浪费的时间也非常高。重用这些缓冲区和避免分配的改进产生了非常大的性能改进。

您可以使用 BufferManager 类来避免编写您自己的缓冲区管理策略。

关于c# - 分配字节数组对性能至关重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com