获得循环的最大性能
Get Maximum Performance of a loop
我正在尝试对 BigInteger 变量进行计算,然后将结果添加到数据库中。
事情是这样的:
for (BigInteger i = 0; i < ABigIntegerVariable; i++)
{
// add to db and calculate on a BigInteger
}
所以问题是当我在任务管理器上看到 CPU 使用率只有 8% 左右!
这个循环大约需要 1 小时或更长时间!!!
所以当我尝试计算和添加到数据库时,我没有必要使用计算机。
你能告诉我如何使用具有高计算百分比的 CPU 并改进此过程以获得更快的计算吗?!
谢谢
这是出于多种原因:
1。你的 for 循环在单线程上运行,
2。您在每次迭代中将数据插入数据库,而不是在循环处理完成后批量执行。
建议的解决方案:
1。你可以试试用Parallel.For的方法来加速1。
原因。
示例:https://msdn.microsoft.com/en-us/library/dd460713(v=vs.110).aspx
2。您可以将负责从 for 循环中保存数据的代码移出它以加速 2。原因。
如果循环内的代码可以运行并发
,你可以使用Task/Thread
for (BigInteger i = 0; i < ABigIntegerVariable; i++)
{
Thread thread= new Thread(m =>
{
//TODO: do something spectacular with i
});
thread.Start(i);
}
我正在尝试对 BigInteger 变量进行计算,然后将结果添加到数据库中。
事情是这样的:
for (BigInteger i = 0; i < ABigIntegerVariable; i++)
{
// add to db and calculate on a BigInteger
}
所以问题是当我在任务管理器上看到 CPU 使用率只有 8% 左右! 这个循环大约需要 1 小时或更长时间!!!
所以当我尝试计算和添加到数据库时,我没有必要使用计算机。
你能告诉我如何使用具有高计算百分比的 CPU 并改进此过程以获得更快的计算吗?!
谢谢
这是出于多种原因:
1。你的 for 循环在单线程上运行,
2。您在每次迭代中将数据插入数据库,而不是在循环处理完成后批量执行。
建议的解决方案:
1。你可以试试用Parallel.For的方法来加速1。 原因。
示例:https://msdn.microsoft.com/en-us/library/dd460713(v=vs.110).aspx
2。您可以将负责从 for 循环中保存数据的代码移出它以加速 2。原因。
如果循环内的代码可以运行并发
,你可以使用Task/Thread for (BigInteger i = 0; i < ABigIntegerVariable; i++)
{
Thread thread= new Thread(m =>
{
//TODO: do something spectacular with i
});
thread.Start(i);
}