【问题标题】:EntityFramwork System.OutOfMemoryException on inserting 100MB to varbinary实体框架 System.OutOfMemoryException 插入 100MB 到 varbinary
【发布时间】:2012-03-30 23:26:58
【问题描述】:

对于 62MB 的文件,上传工作正常。但是,如果它是 100MB,则会引发异常。

我在 stackoverflow 中发现了一些问题,但没有一个关于数据类型的问题非常具体。

感谢您的帮助!

ASP.Net 4、IIS7、EntityFramework 4.1、Visual Studio 2010 SP1、SQL 2008

DataType 是 varbinary(max)

applicationHost.config

<section name="requestFiltering" overrideModeDefault="Allow" />

web.config

<httpRuntime maxRequestLength="1148576" executionTimeout="3600"/>

<security >
  <requestFiltering>
    <requestLimits maxAllowedContentLength="112400000" />
  </requestFiltering>
</security>

我使用 EntityDataModel。设计器引发了以下异常。

【问题讨论】:

  • 看起来不像“普通”EF 代码 - 这是使用 WCF RIA 吗?
  • 也许您应该尝试流式传输或 MTOM 消息编码(如果这确实是 WCF)。
  • 我正在使用 EntityDataModel。从那里抛出异常。

标签: asp.net entity-framework entity-framework-4 entity-framework-4.1


【解决方案1】:

看起来你的文件太大了,不适合你的记忆。这可能是因为文件的字节在您的处理过程中被复制了几次,在此过程中它们的大小成倍增加。

这个错误有什么让你吃惊的地方?

【讨论】:

  • 本地计算机和服务器都有很多内存。我是否遗漏了什么或 EF 不允许 100MB 文件?谢谢!
  • 你的进程是 32 位的吗?无论如何,没有人故意抛出OOM。你是OOM,你只是不知道为什么。
  • 我不知道您对应用程序中文件的内容做了什么,但根据 MSDN:“此方法必须返回值的副本,因为字节数组在不提供可靠机制的情况下是可变的用于跟踪更改。” - 所以 EF 已经创建了数组的两个副本。如果您将文件的内容读取到数组中以设置属性,您可能还有一个副本。如果您将数据保存到数据库中,我认为 EF 可能会在原始值中再复制一份...
  • 你真正应该做的是使用更新语句(msdn.microsoft.com/en-us/library/ms177523.aspx)的WRITE子句将数据流式传输到sql server。这允许您上传任意大的文件。 EF 不适合这个。
  • @user - 你太棒了!用 WRITE 更新作品。我还附上了链接,以便其他人可以使用它。再次感谢你的帮助! stackoverflow.com/questions/1942609/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2011-07-27
  • 1970-01-01
相关资源
最近更新 更多