BDu*_*ubs 7 arrays powershell powershell-jobs
我很难理解在PowerShell中处理大型数据集/数组的最有效方法。我的阵列中有数百万个项目需要处理和分组。此列表的大小始终不同,这意味着可以是350万个或1000万个项目。
示例:将350万个项目按“ 4”分组,如下所示:
项目0、1、2、3组合在一起4,5,6,7组合在一起,依此类推。
我尝试通过遍历列表并分配给pscustomobject来使用单线程处理数组,而该工作仅需要45-50分钟即可完成。
我还尝试将数组拆分为较小的数组,但这会使进程运行更长的时间。
$i=0
$d_array = @()
$item_array # Large dataset
While ($i -lt $item_array.length){
$o = "Test"
$oo = "Test"
$n = $item_array[$i];$i++
$id = $item_array[$i];$i++
$ir = $item_array[$i];$i++
$cs = $item_array[$i];$i++
$items = [PSCustomObject]@{
'field1' = $o
'field2' = $oo
'field3' = $n
'field4' = $id
'field5' = $ir
'field6'= $cs
}
$d_array += $items
}
Run Code Online (Sandbox Code Playgroud)
我想像一下,如果我使用一个作业调度程序,使我可以运行多个作业,将大大减少处理时间,但是我想让其他人采取快速有效的方法来解决这一问题。
如果您正在处理大数据,使用 C# 也很有效。
Add-Type -TypeDefinition @"
using System.Collections.Generic;
public static class Test
{
public static List<object> Convert(object[] src)
{
var result = new List<object>();
for(var i = 0; i <= src.Length - 4; i+=4)
{
result.Add( new {
field1 = "Test",
field2 = "Test",
field3 = src[i + 0],
field4 = src[i + 1],
field5 = src[i + 2],
field6 = src[i + 3]
});
}
return result;
}
}
"@
$item_array = 1..10000000
$result = [Test]::Convert($item_array)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |