C# 使用线程C在数组中查找重复项#

C# 使用线程C在数组中查找重复项#,c#,arrays,multithreading,search,C#,Arrays,Multithreading,Search,我尝试使用线程在数组(排序)中查找重复的元素。 我的想法是将数组一分为二,并将每一半分配给一个线程。 但是当我运行代码时,我得到的时间正好相同,就像我没有使用线程一样 我的代码: Parallel.Invoke(()=>Search(0,elements.Length/2,elements), ()=>Search(elements.Length/2,elements.Length-1,elements)); 搜索方法: public

我尝试使用线程在数组(排序)中查找重复的元素。 我的想法是将数组一分为二,并将每一半分配给一个线程。 但是当我运行代码时,我得到的时间正好相同,就像我没有使用线程一样

我的代码:

        Parallel.Invoke(()=>Search(0,elements.Length/2,elements),
            ()=>Search(elements.Length/2,elements.Length-1,elements));
搜索方法:

    public static void Search(int start , int stop , int[] elements)
    {
        for (var i = start; i < stop; i++)
        {
            if (elements[i] == elements[i + 1])
            {
                Console.WriteLine("found ,time  " + (DateTime.Now - _start));
                break;
            }
        }
    }
公共静态无效搜索(int start、int stop、int[]元素)
{
对于(变量i=开始;i<停止;i++)
{
if(元素[i]==元素[i+1])
{
WriteLine(“找到,时间”+(DateTime.Now-_start));
打破
}
}
}
数组是100000000个元素。
另外,我也不是在寻找类似LINQ的解决方案。

此解决方案可能会帮助您了解用于测试此功能的阵列有多大?TPL非常明智地决定是否需要一个新线程,或者创建/获取线程和切换上下文的开销是否会消耗任何好处。所以我猜
Parallel.Invoke
只使用一个线程进行搜索。多线程应该只对“大”的东西执行(设置速度很慢)。我要说的是,任何不影响用户界面且短于0.1秒的东西都不应该是多线程的。在0.1到1秒之间,我会想很多然后再做。是的,但是每个线程如何知道其他块中的重复?这种方法有一个基本问题:如果要进行分治,必须确保不会意外地将输入拆分为一个完全重复的值,否则,任何一半实际上都不会包含一个副本。因此,至少需要一个自定义分区函数来在分区之前检查这一点。总的来说,这似乎比它的价值要麻烦得多。数组是如何排序/构造的?有没有什么方法可以使算法在工作时适用于检测重复项?