Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate-引发Sytem.OutOfMemoryException_C#_Asp.net Mvc_Database_Nhibernate_Orm - Fatal编程技术网

C# NHibernate-引发Sytem.OutOfMemoryException

C# NHibernate-引发Sytem.OutOfMemoryException,c#,asp.net-mvc,database,nhibernate,orm,C#,Asp.net Mvc,Database,Nhibernate,Orm,当我尝试使用ASP.NET MVC和NHibernate从数据库中获取185条记录时,我遇到System.OutOfMemoryException。 以下是Repository类中方法的代码片段: public IList<RequestForm> GetForFullExport(RequestFormSearchCriteria searchCriteria, string[] restrictRoles) { ... DetachedCriteria criteria

当我尝试使用ASP.NET MVC和NHibernate从数据库中获取185条记录时,我遇到System.OutOfMemoryException。 以下是Repository类中方法的代码片段:

public IList<RequestForm> GetForFullExport(RequestFormSearchCriteria searchCriteria,     string[] restrictRoles)
{
...

DetachedCriteria criteria = DetachedCriteria.For<RequestForm>()
   .CreateAlias("RequestMember", "RequestMember")
   .CreateAlias("RequestFormStatu", "RequestFormStatu")
   .SetFetchMode("RequestMember", FetchMode.Eager)
   .SetFetchMode("RequestFormStatu", FetchMode.Eager);

DetachedCriteria criteriaLang = DetachedCriteria.For<RequestForm>("af")
    .SetFetchMode("RequestFormsLanguages", FetchMode.Eager)
    .SetFetchMode("RequestFormsLanguages.LanguageMember", FetchMode.Eager);

DetachedCriteria criteriaDoc = DetachedCriteria.For<RequestForm>("af")
    .SetFetchMode("RequestFormsDocuments", FetchMode.Eager)
    .SetFetchMode("RequestFormsDocuments.DocumentMember", FetchMode.Eager);

criteriaLang.Add(Subqueries.PropertyIn("Id", NHibernate.CriteriaTransformer.Clone(criteria).SetProjection(NHibernate.Criterion.Projections.Id())));
criteriaDoc.Add(Subqueries.PropertyIn("Id", NHibernate.CriteriaTransformer.Clone(criteria).SetProjection(NHibernate.Criterion.Projections.Id())));

//Add sort
if (!string.IsNullOrEmpty(searchCriteria.SIdx))
{
    criteria.AddOrder(new Order(searchCriteria.SIdx, searchCriteria.SOrd == "asc"));
}

var multiResult = Session.CreateMultiCriteria()
    .Add(criteria)
    .Add(criteriaLang)
    .Add(criteriaDoc)
    .List();

...
}
public IList GetForFullExport(RequestFormSearchCriteria searchCriteria,string[]restrictRoles)
{
...
DetachedCriteria=DetachedCriteria.For()
.CreateAlias(“请求成员”、“请求成员”)
.CreateAlias(“RequestFormStatu”、“RequestFormStatu”)
.SetFetchMode(“RequestMember”,FetchMode.Eager)
.SetFetchMode(“RequestFormStatu”,FetchMode.Eager);
DetachedCriterialang=DetachedCriteria.For(“af”)
.SetFetchMode(“RequestFormsLanguages”,FetchMode.Eager)
.SetFetchMode(“RequestFormsLanguages.LanguageMember”,FetchMode.Eager);
DetachedCriteriaDoc=DetachedCriteria.For(“af”)
.SetFetchMode(“RequestFormsDocuments”,FetchMode.Eager)
.SetFetchMode(“RequestFormsDocuments.DocumentMember”,FetchMode.Eager);
Add(subquerys.PropertyIn(“Id”,NHibernate.CriteriaTransformer.Clone(criteria.SetProjection)(NHibernate.criteria.Projections.Id());
Add(subquerys.PropertyIn(“Id”,NHibernate.CriteriaTransformer.Clone(criteria.SetProjection)(NHibernate.criteria.Projections.Id());
//添加排序
如果(!string.IsNullOrEmpty(searchCriteria.SIdx))
{
criteria.AddOrder(新订单(searchCriteria.SIdx,searchCriteria.SOrd==“asc”);
}
var multiResult=Session.CreateMultiCriteria()
.Add(标准)
.Add(标准语言)
.Add(标准文档)
.List();
...
}
下面是代码在Session.CreateMultiCriteria()处与System.OutOfMemory异常中断的地方。 我提取了NHibernate生成的SQL查询,并直接在SQLServer2005ManagementStudio中执行,结果非常快(185行)

应用程序实际上正在尝试将jQuery网格行导出到CSV文件,并且在这个过程中调用了上述方法。 只有当我尝试导出所有行时,才会发生崩溃。当我导出几行时,一切正常


提前感谢您的帮助。

代码中有问题的部分是
criteriaDoc
,它正在搜索包含MS Word文件的DB记录。这些文件的大小很大,这就是我得到这个异常的原因。我没有意识到这一点,因为我最近接管了这个应用程序。我现在在调查的时候发现了

基本上,我的问题解决了,因为网格导出不需要文档文件


不过,如果有人能回答使用NHibernate获取大数据的限制,那就太好了。

您需要设置MaxResult,这样它就不会将所有行都提取到列表中。

我也面临同样的问题。您可以使用无状态会话并设置批大小。它解决了与批量数据插入数据库相关的问题。
更多参考信息:

对不起,我忘记放置堆栈跟踪,但无论如何,我已经找到了问题所在。我会把它作为答案贴出来。谢谢