并行任务比单个任务耗时更长



我正在尝试创建并行任务。该任务调用相同的方法。方法正在处理一些值。

这是示例代码:

private OpcClient client = new OpcClient();
private void starttask()
{
client = new OpcClient("opc.tcp://172.16.100.1:55105");
client.Connect();
List<string> mytask = new List<string>();
mytask.Add("process1");
mytask.Add("process2");
Parallel.For(0, 2, new ParallelOptions { MaxDegreeOfParallelism = 2 }, i =>
{
mymethod(mytask[i]);
});
}
private string mymethod(string node)
{
OpcNodeInfo machineNode = client.BrowseNode(node);
string val = "";
foreach (var childNode in machineNode.Children())
{
string _node = childNode.NodeId.ValueAsString;
val = client.ReadNode("ns=6;s=" + _node).ToString();
Console.WriteLine("Value = " + val);
}
return val;
}

问题是,当我在没有任务的情况下调用这个方法时,处理需要7秒,但并行调用需要两倍多一点的时间,比如说15秒。该方法处理任务1和任务2的相同数据,但来自不同的位置(地址(。。。

为什么?不应该是两项任务同时完成,或者我错过了什么吗?

这似乎是IO绑定。

PLC是否很好地支持并行读取?听起来像是瓶颈。

试着从两个不同的PLC中读取,你可能会得到更快的结果。

如果你只是在mymethod((中添加一些伪计算(或Thread.Sleep(((,你会发现它在并行中运行得更快。

最新更新