2012-05-25 37 views
1

我得到“内存溢出异常”,而使用Web服务发送大量的数据。它适用于少量的数据。 情景是这样的: 在这里我有实体类称为clsMovie。这里用户上传大于250 MB的大文件。这个文件被转换为数组的字节并分配给clsMovie类的MovieData成员。 当这个类的对象被传递给具有大量数据(大数据字节的数组)的Web服务时,我得到“内存不足异常”。“的System.OutOfMemoryException”在发送大量数据,以Web服务的C#

代码是:

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

    } 

我尝试使用WSE 3.0工具,但它不是在VS 2008的支持,也是我用Google搜索了很多,但一切都是徒劳。 任何人都有解决方案?

+0

的可能重复[是否有一个ASP.Net应用程序的任何内存限制?(http://stackoverflow.com/questions/525894/is-there-any-memory-restrictions-on-an-asp-net - 应用程序) – Reniuz

+1

更改Web服务使用分块(例如发送1MB的部分)应该使这个错误消失。使用Web服务和发送大量数据并不是真正的方法。 – CodingBarfield

+0

@Reniuz:这不是dat的重复。 – ravidev

回答

1

发送的250 MB在web服务的阵列消耗大量的内存,你需要大概3次250 MB的可用内存来处理数组。如果您有10位用户上传,会发生什么?此外,如果您制作soap消息(这是xml并且每个字节都转换为char + xml标记),则大小约为您的250 MB文件的大小的10倍。

有更好的协议,那么webserices发送大文件,例如,你可以使用ftp当ftp上传完成后发送过webserices上传的文件名。或者制作5 MB卡盘,并在最后一个卡盘在那时结合使用。

0

你可以检查您的配置文件大小配额的结合。

<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的流媒体功能: “Large Data and Streaming in WCF”(MSDN)

[编辑]

关于它的思考,如果你击中了配额限制,例外情况很可能会有所不同,并告诉它你喜欢“最大阵列长度配额已被超过”或类似的东西。

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

+0

我在配置文件中进行了此更改,但无法正常工作。我正在使用asp。网络服务不是WCF。 – ravidev

+0

@ravidev:请参阅我的编辑。 –

+0

没有内存泄漏,我无法发送大小超过128MB的数组字节。 – ravidev

相关问题