C# 并行linq置换

C# 并行linq置换,c#,linq,parallel-processing,compression,permutation,C#,Linq,Parallel Processing,Compression,Permutation,我想使用并行linq使我对GetCompressionRatio的where调用更快,但所有Plinq语句的语法都不同,这是我第一次使用linq。我不能处理并行输出,但我希望尽快填充查询 我在polar中添加了.AsParallel(),使处理器使用率翻倍什么是polar?问题是让LINQ查询工作还是让它并行运行?在许多情况下,您只需对查询中的可枚举项调用.AsParallel()(sopolar.AsParallel())即可将LINQ查询更改为并行运行。@vossad01谢谢,我刚刚发现您

我想使用并行linq使我对GetCompressionRatio的where调用更快,但所有Plinq语句的语法都不同,这是我第一次使用linq。我不能处理并行输出,但我希望尽快填充查询


我在polar中添加了.AsParallel(),使处理器使用率翻倍

什么是
polar
?问题是让LINQ查询工作还是让它并行运行?在许多情况下,您只需对查询中的可枚举项调用.AsParallel()(so
polar.AsParallel()
)即可将LINQ查询更改为并行运行。@vossad01谢谢,我刚刚发现您可以将.AsParallel()添加到记录字符串[]polar=new string[6]的from语句末尾;我无法从您的评论中看出这一点,所以我只想指出,如果您希望极坐标具有大规模并行性,您将希望将其添加到极坐标的每一次出现的末尾。@vossad01我尝试将其添加到所有实例的极坐标的末尾,但它仍然使用相同数量的cpu功率,因为您指定了AsParallel()这并不意味着它实际上是并行执行的,如果库认为如果代码不是并行运行的,那么执行时间会更快(存在分区、上下文切换等开销),那么它就不会并行运行。
static double GetCompressionRatio(string input)
{
    if (string.IsNullOrEmpty(input))
        throw new ArgumentNullException();

    MemoryStream ms = new MemoryStream();

    GZipStream gzip2 = new GZipStream(ms, CompressionMode.Compress, true);

    byte[] raw = Encoding.UTF8.GetBytes(input);
    gzip2.Write(raw, 0, raw.Length);
    gzip2.Close();

    byte[] zipped = ms.ToArray(); // as a BLOB
    int startsize = raw.Length;

    double percent = Convert.ToDouble(zipped.Length) / Convert.ToDouble(startsize);
    return percent;
}

var query = 
             from sp1 in polar
                    ...
             from vp15 in polar                           
             where GetCompressionRatio(sp1+...+vp15)>1.5      
             select sp1+...+vp15;


foreach (var element in query)
{
    //output
}