C# 并行任务比单个任务耗时更长
我正在尝试创建并行任务。任务调用相同的方法。方法正在处理一些值 以下是示例代码:C# 并行任务比单个任务耗时更长,c#,parallel.foreach,C#,Parallel.foreach,我正在尝试创建并行任务。任务调用相同的方法。方法正在处理一些值 以下是示例代码: private OpcClient client = new OpcClient(); private void starttask() { client = new OpcClient("opc.tcp://172.16.100.1:55105"); client.Connect(); List<string> mytask = ne
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;
}
private OpcClient client=new OpcClient();
私有无效starttask()
{
客户端=新的opc客户端(“opc。tcp://172.16.100.1:55105");
client.Connect();
List mytask=new List();
mytask.Add(“process1”);
mytask.Add(“process2”);
Parallel.For(0,2,新的ParallelOptions{MaxDegreeOfParallelism=2},i=>
{
mymethod(mytask[i]);
});
}
私有字符串mymethod(字符串节点)
{
OpcNodeInfo machineNode=client.BrowseNode(节点);
字符串val=”“;
foreach(machineNode.Children()中的var childNode)
{
字符串_node=childNode.NodeId.ValueAsString;
val=client.ReadNode(“ns=6;s=“+_node).ToString();
Console.WriteLine(“Value=“+val”);
}
返回val;
}
问题是,当我在没有任务的情况下调用这个方法时,处理过程需要7秒,但是并行调用这个方法需要两倍多一点的时间,所以说15秒。该方法正在处理task1和task2的相同数据,但来自不同的位置(地址)
为什么呢?不应该是两个任务同时完成,或者我遗漏了什么吗?这似乎是IO限制的 PLC支持并发读取吗?听起来像是瓶颈 尝试从两个不同的可编程逻辑控制器读取数据,也可能获得更快的结果
如果您只是在mymethod()中添加一些虚拟计算(或Thread.Sleep()),您将看到它并行运行得更快。我们需要有关您在mymethod()中所做操作的更多信息。请提供一个链接。@Macke mymethod()正在使用OPC UaFX lib从PLC读取数据。