首页 > 解决方案 > 尝试从 Soap WebService 发送大字节 [] 时出现 OutOfMemory 异常

问题描述

我们有来自 Web 服务的以下方法,从另一个应用程序调用以检索数据:

        [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;
        }

这些文件有不同的大小,从 1 kb 到 30 mb。可以从 100 个不同的客户端调用此方法,或多或少在不同的时间段内调用此方法。

每次调用后内存都不会释放,在某些时候我们会得到 OutOfMemory 异常(更常见的是当它是关于一个更大的文件,20-30 mb 时)。

MemoryStream 和 FileStream 对象每次都会被释放,但这还不够。

是否有另一种方法可以从文件中返回一个 byte[] 数组,该文件最多可以有 30 MB 且内存消耗更少?

标签: arraysmemory-leaksout-of-memory

解决方案


推荐阅读