1

C# を使用して多数のオブジェクトを並列に作成する方法について説明が必要です。今、私は非常に怠惰なことをしています (一番下の例を参照してください)。アプリケーションがこれらすべてのオブジェクトを初期化するのに 10 秒以上かかるため、並列処理を使用してパフォーマンスを改善したいと考えています。

        LocationCollection collection = new LocationCollection() 
        {
            new Location( 45.516020899111012,9.121949242919207),
            new Location( 45.515890001741056,9.12163291732332),
            new Location( 45.515769306159115,9.121201707799385),
            new Location( 45.515713976667044,9.120921331149775),
            new Location( 45.516101870996565,9.120109674115509),
            new Location( 45.517649612704567,9.116948581756963),
            new Location( 45.518057566952308,9.116076542009536),
            new Location( 45.518131625236613,9.115917929540883),
            new Location( 45.518670136997606,9.114769836460944),
            new Location( 45.519004561368767,9.114144538020609),
            new Location( 45.522601162665104,9.107672668774397),
            new Location( 45.522748862809266,9.109105402458235),
            new Location( 45.523972603875457,9.10865818071991),
            new Location( 45.524045083673286,9.108966406046985),
            new Location( 45.523423302236786,9.109341605674809),
            new Location( 45.523092661828628,9.109803152708732),
            new Location( 45.522818514726829,9.110530052388302),
            new Location( 45.522246352996028,9.111013842048367),
            new Location( 45.521746927840852,9.111578624890933),
            new Location( 45.520781496237099,9.112948113338327),
            new Location( 45.52043700147,9.114788655024009),
            new Location( 45.520293766461208,9.11598042287495),
            new Location( 45.520028393083059,9.116803240629514),
            new Location( 45.519747394472901,9.11727749496557),
            new Location( 45.518959913236941,9.118230512071632),
            new Location( 45.51901582000967,9.118394197027454),
            new Location( 45.519046672303304,9.118457960354206),
            new Location( 45.519912005862544,9.117775334469274),
            new Location( 45.519973990870028,9.117937113800979),
            new Location( 45.52162009603299,9.117660191651888)
         }

すべての LocationCollection を埋める必要があるため、for ループを使用せずにこれを 88 回実行しています。これまでのところ、他の解決策は見つかりませんでした。前もって感謝します

4

1 に答える 1

1

最後に、用語の非常に厳密な意味で並列化を使用していませんでした。すべての初期化オブジェクトが別のスレッドによって作成される async メソッドを使用するだけです。このようにして、ジョブを 2 つの部分に分割します。1 つは初期化用で、もう 1 つはアプリケーションの残りの部分です。

private async static Task<bool> CreateLocations()
{
    LocationCollection collection = new LocationCollection() 
    {
        new Location( 45.516020899111012,9.121949242919207),
        new Location( 45.515890001741056,9.12163291732332),
        new Location( 45.515769306159115,9.121201707799385),
        new Location( 45.515713976667044,9.120921331149775),
        new Location( 45.516101870996565,9.120109674115509),
        new Location( 45.517649612704567,9.116948581756963),
            ......
    }

    // and so on....
}

そして、次のようにメソッドを呼び出します。

public void SetupMap()
{
     Factory.CreateLocations().ConfigureAwait(false);

     // rest of initialization process
}

「ConfigureAwait(false)」を使用すると、スレッドをメインのスレッドから切り離すことができます。メインのものと同期する必要はなかったので、メソッド内のパラメーターとして「false」を入れました

于 2013-06-17T09:12:54.973 に答える