NHibernate和持久存储大文件

时间:2018-12-17 14:21:43

标签: c# file nhibernate

我正在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做到这一点。建议将不胜感激。

0 个答案:

没有答案