Silverlight: как получить ProcessorCount? - PullRequest
3 голосов
/ 24 марта 2009

У меня сложная задача, которую пользователи могут выполнять с помощью приложения Silverlight. Распараллелить это очень простая задача.

Моя проблема в том, что System.Environment.ProcessorCount является критически важным для безопасности, поэтому я не могу легко это проверить.

Я не хочу просто QueueUserWorkItem, потому что я не хочу иметь больше, чем количество выполняемых процессоров - это не поможет.

Один обходной путь описан здесь: http://www.codeproject.com/KB/silverlight/multicore.aspx

Но это немного хакерски, и было бы немного работы, чтобы сделать его достаточно надежным для 4 или 8 потоковых систем.

Какой «правильный» способ решить это? Или Silverlight просто оставляет вас здесь без удачи?

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

Тот факт, что этот метод является SecurityCritical вместо SecuritySafeCritical, вероятно, является артефактом того факта, что в какой-то момент версия .NET Framework для настольных компьютеров требовала, чтобы EnvironmentPermission получил эти данные.

С тех пор мы снизили спрос на настольные ПК, поэтому действительно имеет смысл сделать SafeCritical для Silverlight. Я поднял это как проблему, которую мы должны исправить в будущем выпуске Siverlight, и похоже, что мы сможем это сделать.

Если вы найдете больше случаев, когда есть общедоступные методы, которые считают, что они должны быть SafeCritical вместо Critical в Silverlight, оставьте отзыв на Microsoft Connect . Реальные люди смотрят на эти вопросы, и это лучший способ сообщить нам о ваших болевых точках.

На данный момент похоже, что вам придется использовать предоставленный обходной путь, но в какой-то момент мы исправим аннотацию безопасности здесь.

Это было исправлено в Silverlight 4.

1 голос
/ 24 марта 2009

Я-я не знаю, что механизм обнаружения проекта кода настолько плох. Если ничего другого, вы заключаете этот код в метод, чтобы сделать начальный удар по нему. Когда появляется лучший метод обнаружения, вы меняете реализацию на эту, но я понимаю проблему в том, что вам гарантировано знать, что есть как минимум 2 ядра. Это, конечно, в зависимости от того, какие потоки вы хотите сделать, будет менее производительным на отличном оборудовании.

еще одна неприятная вещь, которую нужно сделать, это позволить пользователю настроить количество потоков, которые он хочет запустить в вашем приложении, как это делает 7zip. если вы обнаружите более 2 ядер, вы можете затем предоставить элемент управления вращением, чтобы пользователь мог решить, сколько потоков он хочет. неудобнее, чем автоопределение, но, по крайней мере, в случае с ядром 4+ у вас есть надежда, что код работает более оптимально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...