0

並列linqを使用してGetCompressionRatioへのwhere呼び出しを高速化したいのですが、すべてのPlinqステートメントの構文が異なり、linqを使用するのはこれが初めてです。並列出力を処理できませんが、できるだけ早くクエリを入力したいと思います。

並列Linqからオブジェクトコレクション

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
}
4

1 に答える 1

0

.AsParallel()polarに追加すると、プロセッサの使用量が2倍になりました

于 2012-08-25T01:08:55.213 に答える