gpt4 book ai didi

c# - System.OutOfMemoryException异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:55 25 4
gpt4 key购买 nike

我有 C# 客户端应用程序调用用 WCF 调用 Sql Procedure 编写的 Windows webservice,这个过程输出大约 130 万条记录,然后 C# 客户端应用程序将它们保存在内存中并一一进行所有验证我收到错误:

System.Exception: An exception has occurred when recalculating the balances, the transaction will be rolled back.


System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Collections.Generic.List`1.set_Capacity(Int32 value)
at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)
at PitToPort.DataLayer.StockpileData.StockpileProfile.CreateStockpileProfileQualityFromAllPartialMovements()
at PitToPort.DataLayer.StockpileRecalc.Recalc.CreateSP_FOFO_FOLO_NegTransaction(Int32 modelID, StockpileProfile currentStockpileProfile, TransactionsRow drTransactions)
at PitToPort.DataLayer.StockpileRecalc.Recalc.CreateBalanceFOLO_FOFO_TWAA(TransactionsRow[] drTransactionsRows, Int32 modelID, StockpileProfileList stockpileProfileList)
at PitToPort.DataLayer.StockpileRecalc.Recalc.CreateBalances()
at QMastor.PitToPort.StockpileRecalculationBL.RecalcService.CreateBalances()

可能是什么原因导致此错误以及如何纠正它?我已经检查过 proc,它运行良好

最佳答案

看起来您正在尝试初始化某种类型的通用列表,并且这样做会耗尽内存。

过程本身可能会成功,但也可能会返回很多很多行。

在初始化 List 对象之前,您可能希望单步执行代码并检查查询结果。

没有更多的细节,恐怕我无法帮助调试更多。

编辑:

您将需要批量处理存储过程的结果。您仍然可以使用 SqlDataReader,但我建议制作一个最大容量相对较小的列表,例如 1000,然后从 SqlDataReader 读取直到您填满列表...然后清除列表并再次开始阅读:

SqlDataReader dr = cmd.ExecuteReader(); // where cmd is a SqlCommand

List<SomeType> items = new List<SomeType>(1000);

while(dr.Read()) {
// read the values for the row
SomeType obj = new SomeType(dr["id"], dr["value"], ...);

// add the object to the list
items.Add(obj);

// when the list is full, process it, and create a new one.
if(items.Count >= 1000) {
Process(items);
items = new List<SomeType>(1000);
}
}

关于c# - System.OutOfMemoryException异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com