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를 작성해야하기 때문에 루프를 사용하지 않고이 88 시간을하고 있어요. 지금까지 다른 해결책을 찾지 못했습니다. 미리 감사드립니다.

+0

'LocationCollection'은 쓰레드에 안전한가요? – Jobo

+3

88 번이라도 밀리 초가 걸릴뿐입니다. 뭔가 다른 것이 반드시 10 초 정도 걸릴 것입니다. –

+0

@Jobo : Microsoft MSDN Library에 따르면 "이 유형의 모든 공용 정적 멤버 (Visual Basic의 경우 공유 됨)는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하다고 보장되지 않습니다."[link http://msdn.microsoft.com /en-us/library/microsoft.maps.mapcontrol.locationcollection.aspx] (http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.locationcollection.aspx) – davideberdin

답변

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"를 넣었습니다.