我们使用Sculpture software package生成了一个应用程序。这意味着该项目大致相当于Prism应用程序中的代码。
他们的部分模型是所有WCF服务调用都是同步执行的,但是在后台线程上(实际上他们也是异步调用,但是Sculpture后台线程方法在执行之前等待响应)以下任何代码)。
当我们部署应用程序时,我们发现所测试的所有机器中约有50%不会通过第一次服务调用。我们无法在机器中看到任何失败的模式,因为它们在运行和失败的机器上混合使用Debug和Release Silverlight运行时以及Windows 7。它在不同的浏览器上失败,因此是特定于机器的。唯一的线索是它们似乎都是旧电脑。
想点什么?
答案 0 :(得分:1)
找到原因。他们生成的服务电话中有一个小学生错误。
while (true == userState.IsBusy)
{}
忽略true ==
(在C#中不需要)的老派使用,基本上他们的while
循环在某些机器上锁定 从未设置IsBusy状态。这也意味着无论何时进行服务调用,应用程序始终都在运行100%处理器。
我们通过在循环中的所有服务调用中添加Thread.Sleep(100)来解决问题。 e.g:
while (userState.IsBusy)
{
Thread.Sleep(100);
}
我们的应用程序现在正在处理所有支持Silverlight的计算机(应该如此)并使用更少的处理器来启动。
公平地说,我们没有使用最新版本的雕塑,但在商业包装中看到这样一个愚蠢的错误真是令人惊讶。