gpt4 book ai didi

c# - 如何优化大尺寸for循环

转载 作者:太空狗 更新时间:2023-10-29 21:45:42 26 4
gpt4 key购买 nike

我有一个超过 20k 次迭代的 for 循环,每次迭代大约需要两到三秒,总共大约需要 20 分钟。我如何优化这个 for 循环。我使用的是 .net3.5,所以并行 foreach 是不可能的。所以我将 200000 个 nos 分成小块并实现了一些线程,现在我可以将时间减少 50%。有没有其他方法可以优化这种 for 循环。

下面给出了我的示例代码

    static double sum=0.0;
public double AsyncTest()
{
List<Item> ItemsList = GetItem();//around 20k items
int count = 0;
bool flag = true;
var newItemsList = ItemsList.Take(62).ToList();
while (flag)
{
int j=0;
WaitHandle[] waitHandles = new WaitHandle[62];
foreach (Item item in newItemsList)
{
var delegateInstance = new MyDelegate(MyMethod);
IAsyncResult asyncResult = delegateInstance.BeginInvoke(item.id, new AsyncCallback(MyAsyncResults), null);
waitHandles[j] = asyncResult.AsyncWaitHandle;
j++;
}
WaitHandle.WaitAll(waitHandles);
count = count + 62;
newItemsList = ItemsList.Skip(count).Take(62).ToList();
}
return sum;
}

public double MyMethod(int id)
{
//Calculations
return sum;
}

static public void MyAsyncResults(IAsyncResult iResult)
{
AsyncResult asyncResult = (AsyncResult) iResult;
MyDelegate del = (MyDelegate) asyncResult.AsyncDelegate;
double mySum = del.EndInvoke(iResult);
sum = sum + mySum;
}

最佳答案

可以通过各种技术减少循环次数。但是,这不会给您带来任何明显的改进,因为繁重的计算是在您的循环内执行的。如果您已经将它并行化以使用您所有的 CPU 内核,那么就没有什么可做的了。有一定数量的计算要做,并且有一定的计算机能力可用。你不能从你的机器中榨取比它所能提供的更多的东西。

你可以尝试:

  1. 如果可能,更有效地实现您的算法
  2. 切换到更快的环境/语言,例如非托管 C/C++。

关于c# - 如何优化大尺寸for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13283654/

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