我一直在收到system.outofmemoryexception:
类型的异常' System.OutOfMemoryException'被扔了。 在System.Collections.Generic.List
1.set_Capacity(Int32 value) at System.Collections.Generic.List
1.EnsureCapacity(Int32 min) 在System.Collections.Generic.List1.Add(T item) at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) at CIGDataLibrary.Archive.ArchiveCycleData(String applicationName) 在c:!TFS \ SCCSoftware \ Commercial \ CIG \ Wagering \ CIGDataLibrary \ files \ Archive.cs:第571行
第571行的代码:
List<Guid?> cycleData = Queries.Current.GetCycleDataArchiveList();
方法:
public static List<Guid?> GetCycleDataArchiveList()
{
using (var dbContext = new CIGDataModels.CIGDBStoredProcModels())
{
return dbContext.usp_arch_GetCycleData().ToList();
}
}
存储过程的内容:
SELECT TOP 1000 gpCycleData_Id FROM CIGDB.dbo.cig_Cycle_gpCycleData
WHERE [TimeStamp] < DATEADD(HH, 3, DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())))
ORDER BY [TimeStamp]
有关为何发生这种情况的任何想法?它应该返回1000条记录(只是一个GUID列表),所以不应该扔掉一个合适的,对吧?我已将SP降至TOP 1但仍导致相同的错误。
答案 0 :(得分:0)
您的生产数据库返回了太多行。它可能错过了存储过程中的TOP n
子句,因此它返回了大量数据,导致应用程序内存不足。
正如你所说,你已经编辑了存储过程只返回一行并且它仍然会导致错误,必须有另一个因素。
假设程序没有比你发布的更多,原因可能是:
myApp
登录数据库,当它调用MyProc
时,它会解析为myApp.MyProc
而不是dbo.MyProc
。答案 1 :(得分:0)
好的,我发现了问题并且已按预期运行。
与异常的堆栈跟踪相反,错误在第572行,而不是571。 那条线是
List<Guid> arch_gpCycle = dbarchContext.cig_Cycle_gpCycleData.Select(s => s.gpCycleData_Id).ToList();
这导致了system.outofmemoryexception。我已将其更改为已编译的查询,该查询返回Guids列表并且已成功运行。