Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并行对象初始化_C#_Windows Runtime_Initialization_Task Parallel Library - Fatal编程技术网

C# 并行对象初始化

C# 并行对象初始化,c#,windows-runtime,initialization,task-parallel-library,C#,Windows Runtime,Initialization,Task Parallel Library,我需要一些关于如何使用C#以并行方式创建大量对象的说明。现在我正在做一件非常懒惰的事情(见下面的例子)。我希望使用并行性来提高性能,因为我的应用程序初始化所有这些对象需要10秒以上的时间 LocationCollection collection = new LocationCollection() { new Location( 45.516020899111012,9.121949242919207), new

我需要一些关于如何使用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)
         }
我在不使用for循环的情况下执行了88次,因为我需要填充每个LocationCollection。到目前为止,我还没有找到任何其他的解决办法。
提前谢谢你

最后,我们没有在严格的术语中使用并行化。我们只是使用异步方法,其中所有初始化对象都由一个单独的线程生成。通过这种方式,我们将作业分为两部分:一部分用于初始化,另一部分用于应用程序的其余部分

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

使用“ConfigureAwait(false)”,我们可以让线程从主线程中分离出来。我们当时不需要将它与主方法同步,因此我们在方法中加入了“false”作为参数,最后,我们没有在术语中非常严格地使用并行化。我们只是使用异步方法,其中所有初始化对象都由一个单独的线程生成。通过这种方式,我们将作业分为两部分:一部分用于初始化,另一部分用于应用程序的其余部分

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

使用“ConfigureAwait(false)”,我们可以让线程从主线程中分离出来。我们不需要将它与主方法同步,因此我们将“false”作为参数放入方法中

LocationCollection是否线程安全?即使执行88次,也只需要毫秒。其他的东西肯定需要10秒钟。@Jobo:根据Microsoft MSDN库,“任何这种类型的公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证线程安全”哦,我不知道这是一个框架类。您的分析告诉您什么?为什么要花这么长时间?LocationCollection是否线程安全?即使这样做88次也只需要毫秒。其他的东西肯定需要10秒钟。@Jobo:根据Microsoft MSDN库,“任何这种类型的公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不能保证线程安全”哦,我不知道这是一个框架类。您的分析告诉您什么?为什么要花这么长时间?