我的步骤如下:
1. 打开文件流 2. 从文件中读取块到byte[]并创建MemoryStream 3. 传输块 4. 回到第2步,直到整个文件被发送
我的问题在于第2步。我认为当我从一个字节数组创建一个内存流时,它会最终出现在LOH上,导致OutOfMemory异常。但是实际上我没有遇到过这个错误,所以我可能对我的假设不正确。
现在,我不想在消息中发送byte[],因为WCF会告诉我数组大小太大。我可以更改允许的最大数组大小和/或我的块大小,但是我希望有其他解决方案。
我的实际问题是:
1. 我当前的解决方案是否会在LOH上创建对象,是否会引起问题? 2. 有更好的解决方法吗?
另外,在接收端,我只需从到达的流中读取较小的块并将它们直接写入文件中,因此没有涉及大型字节数组。
编辑: 当前解决方案:
for (int i = resumeChunk; i < chunks; i++)
{
byte[] buffer = new byte[chunkSize];
fileStream.Position = i * chunkSize;
int actualLength = fileStream.Read(buffer, 0, (int)chunkSize);
Array.Resize(ref buffer, actualLength);
using (MemoryStream stream = new MemoryStream(buffer))
{
UploadFile(stream);
}
}
var stream = new MemoryStream(buffer, 0, actualLength)
。 - SergioL