nHibernate долго говорил, чтобы сохранить двоичные данные - PullRequest
0 голосов
/ 12 октября 2011

Я пытаюсь сохранить файлы в базе данных сервера SQL, используя тип столбца filestream и nHibernate.

Кажется, что это работает, но это ОЧЕНЬ медленно, я попытался изменить это на обычный столбец varbinary (max), и это не имеет никакого эффекта.

Тестирование на локальном сайте с использованием локальной базы данных ... сохранение файла ~ 100 КБ занимает около 5-10 секунд, сохранение файла ~ 5 МБ занимает 20-30 минут.

Глядя на профилировщики SQL, кажется, что nHibernate так долго выталкивает оператор вставки, а не проблему с БД.

При попытке выполнить фиксацию он загружает около 80 МБ памяти, но процессор не загружается, он просто сидит там.

Кто-нибудь сталкивался с этим раньше или имеет какие-либо идеи, прежде чем я отлаживаю в исходный код nHibernate?

Вот моя конфигурация ...

public class ProgramDocument : IDocumentFile
{
    public virtual int ProgramDocumentId { get; set; }
    public virtual Program Program { get; set; }
    public virtual byte[] DocumentData { get; set; }
    public virtual ProgramDocumentationType DocumentType { get; set; }
    public virtual string MimeType { get; set; }
    public virtual string FileExtension { get; set; }
    public virtual ProgramPresenter ProgramPresenter { get; set; }
    public virtual DateTime CreateDate { get; set; }
}

public class ProgramDocumentOverride : IAutoMappingOverride<ProgramDocument>
{
    public void Override(AutoMapping<ProgramDocument> mapping)
    {
        mapping.Map(_ => _.DocumentData).Length(int.MaxValue).LazyLoad();
    }
}
* +1015 * Спасибо, Брайан В.

1 Ответ

0 голосов
/ 12 октября 2011

Я подозреваю, что проблема связана с тем, что NH пытается проверить, есть ли изменения в двоичном поле, и это займет больше времени, чем просто сохранение.Я помню, что в прошлом была такая проблема, и я не помнил обходной путь, или если он был решен.Попробуйте проверить джира: https://nhibernate.jira.com/secure/Dashboard.jspa

...