2009-03-24 2 views
3

사용자가 Silverlight 앱을 사용하여 수행 할 수있는 연산 집약적 인 작업이 있습니다. 병렬 처리는 매우 쉬운 작업입니다.Silverlight : ProcessorCount를 얻는 방법?

내 문제는 System.Environment.ProcessorCount가 보안 중요하므로 내게 쉽게 확인할 수 없다는 것입니다.

QueueUserWorkItem을 실행하고 싶지는 않습니다. 실행중인 프로세서의 수 이상을 갖고 싶지 않기 때문에 도움이되지 않습니다.

한 가지 해결 방법은 여기에 설명되어 있습니다 : http://www.codeproject.com/KB/silverlight/multicore.aspx

하지만 조금 hackish, 그리고이 작품의 비트가 4 개 또는 8 스레드 시스템이 합리적으로 신뢰할 수 있도록하는 것입니다.

이 문제를 해결하는 "올바른"방법은 무엇입니까? 아니면 Silverlight가 당신을 여기서 빠져 나갈 수 있습니까?

+0

단순히 4 개의 코어로 실행되도록 코딩하는 것이 위험할까요? 단일 코어 시스템의 오버 헤드는 내 경험에 나쁜 영향을 미치지 않습니다. – Chris

+0

벤치마킹을 해보고 얼마나 상처 받을지 알아 보겠습니다. 각 작업에는 1 또는 2MB의 데이터가 있으므로 더 많은 스레드를 실행하면 오버 헤드를 전환하는 것 외에도 캐시 문제가 발생할 것으로 생각됩니다. – MichaelGG

답변

3

SecuritySafeCritical 대신이 메서드가 SecurityCritical이라는 사실은 데스크톱 버전 .NET Framework 버전에서 EnvironmentPermission이이 데이터를 가져 오도록 요청한 것의 결과 일 수 있습니다.

우리는 데스크톱 측의 요구를 완화하여 Silverlight에서 SafeCritical이되는 것이 실제로 의미가 있습니다. 이 문제는 Siverlight의 향후 릴리스에서 해결해야 할 문제로 제기했으며이를 수행 할 수있을 것으로 보입니다.

Silverlight에서 Critical 대신 SafeCritical이되어야한다고 생각하는 공용 메서드가있는 경우가 더 많으면 Microsoft Connect에서 몇 가지 의견을 보내주십시오. 진정한 사람들은 이러한 문제를 살펴보고 고통 점에 대해 알려주는 것이 가장 좋습니다.

지금까지는 제공된 해결 방법을 따라 가야 할 것처럼 보였지만 어느 시점에서는 여기에서 보안 주석을 수정합니다.

이 문제는 Silverlight 4에서 수정되었습니다.

1

나는 codeproject 탐지 메커니즘이 그렇게 나쁘다는 것을 알지 못합니다. 다른 방법이 없다면 그 코드를 처음 찔러 넣는 방법으로 마무리하십시오. 더 나은 탐지 방법이 나오면 그 구현을 변경하십시오.하지만 적어도 2 개의 코어가 있다는 것을 보장한다는 점에서이 문제를 이해합니다. 이것은 당연히 당신이하고 싶은 스레딩에 따라 훌륭한 하드웨어에서는 성능이 떨어집니다.

다른 일은 사용자가 7zip과 같이 앱에서 실행하려는 스레드 수를 조정할 수 있도록 허용하는 것입니다. 2 개 이상의 코어를 감지하면 사용자가 원하는 스레드 수를 결정할 수 있도록 스핀 컨트롤을 노출 할 수 있습니다. 자동 검색보다 훨씬 까다 롭지 만 적어도 4 개 이상의 코어의 경우에는 코드가 더 최적으로 실행되기를 바랍니다.

관련 문제