我正在尝试使用fileststream列类型和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 .
我怀疑这个问题是由于NH试图检查二进制字段是否有变化,这比仅仅保存需要更长的时间。我记得过去有过这样的问题,但我不记得是如何解决的,或者是否已经解决了。试着检查jira: https://nhibernate.jira.com/secure/Dashboard.jspa