在我们的应用程序中,我们使用Windows Service生成报告。报告的数据是使用存储过程从SQL Server获取的。在某些情况下,返回的结果集包含 250,000 条记录(我们对此无能为力,我们需要一次性使用这些数据,因为我们需要对此进行一些计算)。
问题
我们的应用程序正在阅读器中获取此数据,并且我们正在将此数据集转换为自定义对象的自定义集合。由于数据量很大,它无法将完整的数据存储在自定义对象中,从而导致内存不足。当我们在执行记录时看到任务管理器的进程使用率时,它会变得非常高,甚至是 CPU 使用率。
我不确定在这种情况下应该怎么做。
- 我们可以增加分配给在 CLR 下运行的单个进程的内存大小吗?
- 还有其他解决方法吗?
任何帮助将非常感激
- 为什么我一次需要所有数据:我们需要对完整的结果集进行计算
- 我们正在使用 ADO.NET 并将数据集转换为我们的自定义对象(集合)
- 我们的系统是 32 位的
- 我们无法分页数据
- 无法将计算移至 sql server
此堆栈跟踪可能会有所帮助:
引发了“System.OutOfMemoryException”类型的异常。服务器堆栈跟踪:在 System.Collections.Generic.Dictionary
2.ValueCollection.System.Collections.Generic.IEnumerable<TValue>.GetEnumerator() at System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext() 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable
1 集合)在 System.Collections.Generic.List1.AddRange(IEnumerable
1 集合)在 MyProject.Common.Data.DataProperty.GetPropertiesForType(在 C:\Ashish-Stuff\Projects\HCPA\Dev Branch\Common\Benefits.Common\Data\DataProperty.shared.cs 中键入 t):MyProject.Common.Data.Extensions.GetProperties[T](T 目标的第 60 行) 在 C:\Ashish-Stuff\Projects\HCPA\Dev Branch\Common\Benefits.Common\Data\Extensions.shared.cs:第 30 行在 MyProject.Common.Data.Factories.SqlServerDataFactoryContract1.GetData(String procedureName, IDictionary
2 个参数,Nullable1 languageId, Nullable
1 pageNumber,Nullable `1 pageSize)
谢谢,阿希什