我正在尝试使用filestream列类型和nHibernate将文件存储在SQL Server数据库中。
它似乎工作但它非常慢,我尝试将其更改为常规varbinary(max)列并且它没有效果。
使用本地数据库在本地站点上进行测试...保存~100k文件大约需要5-10秒,保存~5mb文件需要20-30分钟。
看看SQL分析器,似乎nHibernate需要很长时间才能推出插入语句而不是数据库的问题。
在尝试提交时,它在iis上大约增加了80mb的内存,但处理器根本没有被击中,它只是坐在那里。
在我调试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();
}
}
谢谢, Brian W。
答案 0 :(得分:0)
我怀疑问题是由于NH尝试检查二进制字段是否有变化这一事实,这需要更长时间而不仅仅是保存。我记得过去有这样的问题,我不记得解决方法,或者它是否已经解决。尝试检查jira:https://nhibernate.jira.com/secure/Dashboard.jspa