Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么时候应该使用并行foreach,什么时候应该使用并行linq?_C#_Winforms - Fatal编程技术网

C# 什么时候应该使用并行foreach,什么时候应该使用并行linq?

C# 什么时候应该使用并行foreach,什么时候应该使用并行linq?,c#,winforms,C#,Winforms,我试过下面的代码,它运行得很好,性能也很好。但是当我运行nunit测试用例时,它不工作。我不知道并行linq或并行foreach。是否可以将代码转换为并行linq。请 提出你有价值的建议 Parallel.ForEach(ListofData, item => { if (this.DataSource != null && item != null) {

我试过下面的代码,它运行得很好,性能也很好。但是当我运行nunit测试用例时,它不工作。我不知道并行linq或并行foreach。是否可以将代码转换为并行linq。请 提出你有价值的建议

Parallel.ForEach(ListofData, item =>
            {
                if (this.DataSource != null && item != null)
                {
                    string itemText = this.GetListViewItemValue(item, this.displayMember);
                    if (!string.IsNullOrEmpty(this.Text) && itemText.ToLower().Equals(this.Text.ToString().ToLower()))
                    {
                        this.textBox.Text = itemText.ToString();
                        this.textBox.SelectAll();
                        this.listView.SelectedItems.Add(item);
                    }
                }
            });

祝贺你,你是我的第1000个答案

我什么时候应该使用parallel foreach,什么时候应该使用parallel 林克

它们都做完全相同的事情,都是基于任务并行库构建的,只是语义不同

看看所有的重载和扩展方法,你会发现有时候写PLinq更容易,有时候写
Parallel更容易。For/Foreach

至于你的问题,这与两种方法都没有直接关系。但是,您试图从可能不同的线程更新UI,并且注定会失败

这个不会失败的唯一原因是内部认为它不值得线程使用,并且在原始上下文中运行它

我认为您确实需要重新考虑您的方法,如果您确实想要使用多个线程,那么您将需要相应地封送回UI线程

但是当我运行nunit测试用例时,它不起作用


至于你的测试用例。。。我想你现在有更大的问题,你的代码不是线程安全的,但是当我运行nunit测试用例时它不工作。它以什么方式不工作?如果我有10个测试用例,5个测试用例通过了其他测试用例没有运行,这还不够详细@Sam10。如果我上传50000个数据到listview,它循环50000次,以提高我使用的并行foreach的性能。。。。。我能找到其他方法来提高性能吗?如果有,请提出建议…这是另一个问题@Sam10。