我正在32位应用程序上使用NHibernate v4和.Net 4.6.1(在我的开发环境中使用SQL Server)。
我需要使用Nhibernate(〜1GB)存储大文件。我将文件存储在延迟加载的Blob列中。
当NHibernate试图持久化代表我的文件的字节数组时,我的问题遇到了内存不足异常。我正在寻找一种不使用其他第三方库的解决方案。
在下面,您可以找到我用来将数据流式传输到我的媒体资源中的代码,该代码可以正常工作直到持久化。当会话尝试提交时(即使仅使用600MB的文件),NHibernate也会引发OOM异常。
public class FileHoldingObject {
public virtual byte[] BinaryColumn {get;set;}
}
var myObject = new FileHoldingObject();
using (FileStream fs = File.OpenRead("C:\\MyBigFile.zip")) {
myObject.BinaryColumn= new byte[fs.Length];
int numBytesToRead = 125000;
int numBytesRead = 0;
while (numBytesToRead > 0) {
int n = fs.Read(myObject.BinaryColumn, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
}
Session.Transaction.Commit(); // OOM thrown here
我能看到的唯一解决方法是将文件流式传输到数据库,但没有发现如何使用现成的NHibernate做到这一点。建议将不胜感激。