Arrays 尝试从Soap Web服务发送大字节[]时发生OutOfMemory异常
我们有来自web服务的以下方法,该方法是从另一个应用程序调用的,用于检索数据:Arrays 尝试从Soap Web服务发送大字节[]时发生OutOfMemory异常,arrays,memory-leaks,out-of-memory,Arrays,Memory Leaks,Out Of Memory,我们有来自web服务的以下方法,该方法是从另一个应用程序调用的,用于检索数据: [WebMethod] public byte[] GetImageAsBytes(int pIdObject) { string pathOfImage = getImagePathBasedOnId(pIdObject); if (File.Exists(pathOfImage)) {
[WebMethod]
public byte[] GetImageAsBytes(int pIdObject)
{
string pathOfImage = getImagePathBasedOnId(pIdObject);
if (File.Exists(pathOfImage))
{
byte[] result = null;
using (MemoryStream memoryStream = new MemoryStream(1))
{
using (FileStream fileStream = File.OpenRead(pathOfImage))
{
int num = -1;
if (fileStream.CanRead)
{
num = fileStream.ReadByte();
}
while (num != -1)
{
memoryStream.WriteByte(Convert.ToByte(num));
num = fileStream.ReadByte();
}
fileStream.Close();
}
result = memoryStream.ToArray();
}
return result;
}
return null;
}
这些文件大小不同,从1KB到30MB不等。此方法可以从100个不同的客户端调用,在不同的时间段或多或少
每次调用后,内存都不会被释放,在某个时候,我们会遇到内存异常(通常是关于一个更大的文件,20-30MB)
MemoryStream和FileStream对象每次都被释放,但这还不够
有没有另一种方法可以从最多30 MB的文件中返回byte[]数组,从而减少内存消耗