【发布时间】:2014-05-18 02:44:09
【问题描述】:
在我的小型文件传输网站(this one,运行 .NET 4.5.1)中,我按照 Microsoft 知识库文章 812406 将之前上传的文件从服务器发送到浏览器。
做性能优化我惊讶地发现那行
var buffer = new byte[10000];
需要相当多的时间(我使用的是 Red Gate 的ANTS Performance Profiler)。每个完整下载/客户端仅分配一次缓冲区。
我的问题:
- 以这种方式和这种大小分配缓冲区是一种好习惯吗?
- 分配 ≈10k 缓冲区的任何替代方案?
更新 1:
感谢您的 cmets,我发现内存也在循环内分配。
不过,ANTS Profiler 仅将分配标记为在循环之外 花费了这么多时间,老实说,我(还)不明白。我已经删除了循环内的(无意义的)分配。
更新 2:
实施了建议的 BufferManager 并将缓冲区大小从 10k 减少到 4096(以防万一...),我的网站从几天以来运行非常流畅。
【问题讨论】:
-
什么是“相当大的时间百分比”?
-
您是在重复使用缓冲区,还是为每 10,000 个字节创建一个新缓冲区?实际上对处理器内核征税有多难?您是否受 CPU 限制或 I/O 限制?
-
你的下载量有多大?
-
只要你花足够的时间去做,任何事情都可能对性能至关重要。
-
示例代码循环重新分配它。
标签: c# .net performance generic-handler