0

タイトルのとおり、Excel に似List<string> keywords; たオブジェクト モデルがあります。Workbook

WorkbookCellリスト内のキーワードに一致するすべてを取得したいと思います。

私は多分 Parallel 検索が良い考えだと思っていました:

            //Loop through all the Worksheets in parallel
            Parallel.ForEach(Workbook.Worksheets, (ws, st) =>
            {
                if (!st.ShouldExitCurrentIteration)
                {
                    //Loop through all the rows in parallel
                    Parallel.ForEach(ws.Rows, (wr, tk) =>
                    {
                        if (!tk.ShouldExitCurrentIteration)
                        {
                            //Loop through all the columns in parallel
                            Parallel.ForEach(wr.Cells, (cell, ctk) =>
                            {
                                if (cell.Value != null)
                                {
                                    var cellValue = cell.Value.ToString();

                                    //Block keyword found, add the occurance
                                    var matchedKeyword = IsKeywordMatched(cellValue);

                                    if (matchedKeyword != null)
                                    {
                                        matchedKeyword.AddMatchedCell(cell);
                                    }
                                }
                            });
                        }
                    });
                }
            });

実際、これはあまりにも多くの並列でしょうか? より良いアイデアがあれば教えてください。

** 通常は 20 未満のワークシートしかありませんが、すべてのワークシートには 10000 を超える行と数百の列が含まれます。

4

2 に答える 2

0

デフォルトの並列スレッド数は、デフォルトあたりのコア数と同じです。各並列ループは、データをn個の部分に分割(クラスタリング)して再度マージするオーバーヘッドに関連しています。ワークシートの数が一般的なケースのコアの数よりも多い場合は、最初のループのみを実行するのが理にかなっていると思います。それ以外の場合は、2番目のレベルでデータを分割します。ネストされた並列ループは、パフォーマンスを低下させるだけです。したがって、そうです、あなたは正しいです、それはあまりにも多くの並列性です。

于 2011-09-17T22:16:02.627 に答える