C# ';System.OutOfMemoryException';向webservice c发送大量数据时#

C# ';System.OutOfMemoryException';向webservice c发送大量数据时#,c#,asp.net,web-services,C#,Asp.net,Web Services,我在使用web服务发送大数据时遇到“内存不足异常”。它适用于少量数据。 情况如下: 这里我有一个名为clsMovie的实体类。在这里,用户上载的大型文件超过250 MB。该文件将转换为数组字节,并分配给clsMovie类的MovieData成员。 当这个类的对象被传递给包含大量数据(大字节数组)的web服务时,我得到“内存不足异常” 代码是: MovieResponse objM = service.SaveProductMovie(objMovieEnt); // I get "Out

我在使用web服务发送大数据时遇到“内存不足异常”。它适用于少量数据。 情况如下: 这里我有一个名为clsMovie的实体类。在这里,用户上载的大型文件超过250 MB。该文件将转换为数组字节,并分配给clsMovie类的MovieData成员。 当这个类的对象被传递给包含大量数据(大字节数组)的web服务时,我得到“内存不足异常”

代码是:

MovieResponse objM = service.SaveProductMovie(objMovieEnt);     // I get "Out of Memory Exception".


    [DataContract]
    [Serializable]
    public class clsMovie
    {
        [DataMember]
        public byte[] MovieData { get; set; }

        [DataMember]
        public string MovieType { get; set; }

        [DataMember]
        public int MovieSize { get; set; }

    }
我曾尝试使用WSE3.0工具,但VS2008不支持它,而且我在谷歌上搜索了很多,但都是徒劳的。
有人有解决方案吗?

通过Web服务发送250 MB的阵列会消耗大量内存,处理阵列可能需要3倍于250 MB的可用内存。如果有10个用户上传,会发生什么?此外,这是250MB文件的大小,大约是生成soap消息时大小的10倍,soap消息是xml,每个字节都转换为char+xml标记


有比Webseries更好的协议来发送大文件,例如,当ftp上传完成时,您可以使用ftp并通过Webseries发送上传文件的名称。或者制作5 MB卡盘,当最后一个卡盘在那里时将其合并

>你应该考虑使用流式操作。请看这里:


您可以在绑定中检查配置文件的大小配额

<basicHttpBinding>
   <binding name="BasicHttpBinding_ForgotPasswordService" closeTimeout="00:10:00"
       openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
       useDefaultWebProxy="true">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
   </binding>
</basicHttpBinding>

可以根据您的需要调整
maxBufferSize=“65536”maxBufferPoolSize=“524288”maxReceivedMessageSize=“65536”

<>但在<>强>你的个别情况>我最好考虑一下WCF的流能力,比如:“(MSDN)

[编辑]

仔细想想,如果您达到了配额限制,那么异常很可能会有所不同,并告诉它“已超过最大数组长度配额”或类似的情况


OutOfMemoryException
可能与至少一个通信系统的实际限制有关。一个可能的原因可能是一些内存泄漏将数据填充到RAM中,并且没有正确地(或足够快地)清理。

更改Web服务以使用分块的可能重复(例如,以1MB的部分发送)应该会消除此错误。使用Web服务并发送大量数据并不是一个好办法。@Reniuz:这不是dat的重复。@CodingBarfield:如何以块的形式发送数据?您是否配置了内存限制?我在配置文件中做了这些更改,但不起作用。我使用的是asp.net webservice而不是WCF。没有内存泄漏。我无法发送大小超过128MB的数组字节。