我最近正在开发一个asp.net Web应用程序。使用linq to sql ORM到数据访问层(DAL)。在我的查询的特定情况下面临clr Level上的stackoverflow异常。
我使用过滤器表达式生成器来获取我们向商店过程发送超过1500个参数的特定数据(例如具有特定信息的加载)。
注意:我们认为RPC(远程过程调用)限制正好是2100 sql server默认设置中的参数。
但我不知道为什么我面临stackoverflow异常?有趣的是,知道这个问题只发生在iis上,而且asp.net web开发服务器没问题。
我几乎找不到导致大量参数的问题。
我很感激有人帮助我?
public List<HSEPersonnelComplexPaging> SelectHSEPersonnelPaging(PagingPropertiesDTO pagingProps, out int recCount)
{
using (HRPaidTimeOffDataContext db = new HRPaidTimeOffDataContext(DBHelper.GetConnectionString()))
{
Expression<Func<HSEPersonnelComplexPaging, bool>> expr =
PredicateBuilder.GetFilterExpression<HSEPersonnelComplexPaging>(pagingProps);
db.DeferredLoadingEnabled = false;
var items = from at in db.HSEPersonnels
where at.IsDeleted == false
select new HSEPersonnelComplexPaging
{
ID = at.HSEPersonnelId,
PersonnelyNo = at.PersonnelyNo,
Name = at.Name,
Family = at.Family,
BirthPlace = at.BirthPlace,
Birthdate = at.Birthdate,
Father = at.Father,
IdNo = at.IdNo,
NationalCode = at.NationalCode,
IsNotActive = at.IsNotActive,
IsDeleted = at.IsDeleted,
InsertDate = at.InsertDate,
UpdateDate = at.UpdateDate,
InsertENTUserAccountId = at.InsertENTUserAccountId
};
var result = items.Where(expr);
recCount = result.Count();
return
result.ApplySortExpression(pagingProps.SortSet).Skip(pagingProps.CurrentPageIndex *
pagingProps.CurrentPageSize).Take(
pagingProps.CurrentPageSize).ToList();
}
答案 0 :(得分:1)
也许这是一种解释:http://support.microsoft.com/kb/932909 IIS创建的所有子进程都具有256kb的堆栈大小
尝试这个奇怪的事情:
Thread thread = new Thread(() => YourMethod(),4194304);
thread .Start();
thread .Join();
重点是在具有更大堆栈大小的单独线程中执行您的方法。
答案 1 :(得分:1)
问题可能在于您正在构建的谓词。当您枚举表达式(您在调用Count()
时执行的操作)时,LINQ to SQL将沿着表达式树向下走,以确定您要查询的内容。您是否可能在某处创建循环引用?