NHibernate и сохраняющиеся большие файлы - PullRequest
0 голосов
/ 17 декабря 2018

Я использую NHibernate v4 и .Net 4.6.1 в 32-разрядном приложении (использую SQL Server в моей среде разработки).

Мне нужно хранить большие файлы, используя Nhibernate (~ 1 ГБ).Я храню файлы в лениво загруженном столбце BLOB-объектов.

Моя проблема связана с исключениями "Недостаточно памяти", когда NHibernate пытается сохранить байтовый массив, представляющий мой файл.Я ищу решение, которое не использует никаких дополнительных сторонних библиотек.

Ниже вы можете найти код, который я использую для потоковой передачи данных в мое свойство, который прекрасно работает до постоянного использования.Когда сеанс пытается зафиксировать (даже когда используется только 600-мегабайтный файл), 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.Предложения будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...