gpt4 book ai didi

c# - 大 foreach 循环越来越慢

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

首先,对不起我的英语,它不是我的主要语言。其次,我会尽力解释自己,但如果有什么不清楚的地方,我会提供任何细节。我有点菜鸟,开始吧。

我有一个很大的 foreach 循环,有 39k 个元素。

foreach (Busqueda.CodDesCIE elemResult in result.listaCodDesCIE)
{
timer.Restart();
elemResultExterno = new getCodBusquedaResponse.ResultadoBusquedaResponse(elemResult.IdBuzon_Detalle, elemResult.Orden, elemResult.TipoAcierto, elemResult.ObjCIE10.Codigo, elemResult.ObjCIE10.Deslarga, elemResult.Cie10Adic1, elemResult.Cie10Adic2);
listaResult.Add(elemResultExterno);
param += " IdBuzon_Detalle:" + elemResultExterno.IdBuzonDetalle + " Orden:" + elemResultExterno.Orden + " TipoAcierto:" + elemResultExterno.TipoAcierto + " Codigo:" + elemResultExterno.Codigo + " Descripcion:" + elemResultExterno.Descripcion + " CodAdic1:" + elemResultExterno.CodAdic1 + " CodAdic2:" + elemResult.Cie10Adic2 + "\r\n";
timer.Stop();
Logger.Current.InfoLog("timerPartial: " + timer.ElapsedMilliseconds.ToString(), "itemNumber", orden.ToString());

orden++;
}

新的getCodBusquedaResponse.ResultadoBusquedaResponse()

问题是对于前... 6k 或更多元素,每次迭代花费的时间少于 0 毫秒,但迭代时间从那时开始增长,在最后的迭代中达到 5 毫秒。偶尔,我也会看到一些偷看(不知道你是否这样调用它,“高点”),其中迭代可能需要 80 毫秒或 100 毫秒。

我想知道,为什么时间不断增长,是否正常,是否很容易避免……以及一些关于如何优化此代码的帮助/解释。

日志:时间以毫秒为单位

[INFO] - itemNumber.2() - timerPartial: 0
[INFO] - itemNumber.7666() - timerPartial: 0
[INFO] - itemNumber.7667() - timerPartial: 1
[INFO] - itemNumber.7725() - timerPartial: 81
[INFO] - itemNumber.23579() - timerPartial: 3
[INFO] - itemNumber.24356() - timerPartial: 101
[INFO] - itemNumber.28144() - timerPartial: 5
[INFO] - itemNumber.29201() - timerPartial: 6
[INFO] - itemNumber.33997() - timerPartial: 5
[INFO] - itemNumber.33998() - timerPartial: 6
[INFO] - itemNumber.38547() - timerPartial: 80
foreachLoop.() - timerTotal: 239389

非常感谢。

编辑:List<getCodBusquedaResponse.ResultadoBusquedaResponse> listaResult

EDIT2:你们中的许多人似乎指出了 paramString。此代码不是 100% 我的,所以不确定是否真的需要它,将尝试您的一些建议,甚至评论该行并提供一些反馈,谢谢。

编辑 3:哇。注释字符串行:foreachLoop.() - timerTotal: 20343

不知道这个问题。现在,这将成功。当然,也会尝试 CarbineCoder 的建议和 Eiver。如果这也有帮助,那就太好了,任何时候我都可以节省。

非常感谢。

最佳答案

我注意到的一件坏事是您附加了 param 字符串变量。这将在您的循环中创建大量丢弃的对象。而是使用字符串生成器。

StringBuilder builder = new StringBuilder()
foreach (Busqueda.CodDesCIE elemResult in result.listaCodDesCIE)
{
..
builder.Append(" IdBuzon_Detalle:").Append( elemResultExterno.IdBuzonDetalle);//etc.....
}
param = builder.ToString();

关于c# - 大 foreach 循环越来越慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084612/

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