从Internet下载文件时分配的最佳内存缓冲区大小是多少?有些样本说它应该是1K.好吧,我需要知道一般为什么呢?如果我们下载一个小型.PNG
或大型的,有.AVI
什么区别?
Stream remoteStream;
Stream localStream;
WebResponse response;
try
{
response = request.EndGetResponse(result);
if (response == null)
return;
remoteStream = response.GetResponseStream();
var localFile = Path.Combine(FileManager.GetFolderContent(), TaskResult.ContentItem.FileName);
localStream = File.Create(localFile);
var buffer = new byte[1024];
int bytesRead;
do
{
bytesRead = remoteStream.Read(buffer, 0, buffer.Length);
localStream.Write(buffer, 0, bytesRead);
BytesProcessed += bytesRead;
} while (bytesRead > 0);
}
Run Code Online (Sandbox Code Playgroud)
Dev*_*aig 18
为了它的价值,我测试了使用2的渐进幂(大小为2,4,8,16 ......)读取1484 KB文本文件.我打印到控制台窗口,读取每个窗口所需的毫秒数.在8192年左右,它似乎并没有什么区别.以下是我的Windows 7 64位计算机上的结果.
2^1 = 2 :264.0151
2^2 = 4 :193.011
2^3 = 8 :175.01
2^4 = 16 :153.0088
2^5 = 32 :139.0079
2^6 = 64 :134.0077
2^7 = 128 :132.0075
2^8 = 256 :130.0075
2^9 = 512 :133.0076
2^10 = 1024 :133.0076
2^11 = 2048 :90.0051
2^12 = 4096 :69.0039
2^13 = 8192 :60.0035
2^14 = 16384 :56.0032
2^15 = 32768 :53.003
2^16 = 65536 :53.003
2^17 = 131072 :52.003
2^18 = 262144 :53.003
2^19 = 524288 :54.0031
2^20 = 1048576 :55.0031
2^21 = 2097152 :54.0031
2^22 = 4194304 :54.0031
2^23 = 8388608 :54.003
2^24 = 16777216 :55.0032
Run Code Online (Sandbox Code Playgroud)
使用至少4KB.这是Windows的正常页面大小(即Windows本身管理内存的粒度),这意味着.Net内存分配器不需要将4KB页面分解为1KB分配.
当然,使用64KB块会更快,但只是略微如此.
归档时间: |
|
查看次数: |
8970 次 |
最近记录: |