Приложение Silverlight Sculpture генерирует блокировку приложений при вызовах сервисов (на некоторых компьютерах) - PullRequest
1 голос
/ 06 октября 2010

У нас есть приложение, сгенерированное с использованием программного пакета Sculpture . Это означает, что проект примерно эквивалентен коду в приложении Prism.

Часть их модели состоит в том, что все вызовы службы WCF выполняются синхронно, но в фоновых потоках (на самом деле они являются также асинхронными вызовами, но методы фонового потока Sculpture ждут ответа, прежде чем выполнить какой-либо следующий код).

Когда мы развернули приложение, мы обнаружили, что около 50% всех протестированных машин не смогут пройти первый вызов службы. Мы не можем видеть никаких шаблонов на машинах, которые выходят из строя, поскольку они имеют смесь как среды отладки и выпуска Silverlight, так и Windows 7 на машинах, которые работают так же, как и отказывают. Он не работает одинаково в разных браузерах, поэтому зависит от конкретной машины. Единственная подсказка в том, что все они, похоже, старше ПК.

Идеи кому-нибудь?

1 Ответ

1 голос
/ 06 октября 2010

Нашел причину.В сгенерированных вызовах службы произошла ошибка школьника.

Что не так с этой картинкой?:

while (true == userState.IsBusy)
{}

Игнорирование старой школы true == (не требуется в C #),в основном, их while петля настолько плотно блокируется на некоторых машинах состояние IsBusy никогда не устанавливается.Это также означает, что приложение всегда использует процессор на 100% при каждом вызове службы.

Мы устранили проблему, добавив Thread.Sleep (100) во все вызовы службы в циклах.Например:

while (userState.IsBusy)
{ 
    Thread.Sleep(100);
}

Наше приложение теперь работает на всех машинах с поддержкой Silverlight (как и должно быть) и использует для загрузки намного меньше процессоров.

Честно говоря, мы не используемсамый последний выпуск скульптуры, но было довольно удивительно видеть такую ​​глупую ошибку в коммерческом пакете.

...