1

我们有一个使用Sculpture 软件包生成的应用程序。这意味着该项目大致相当于 Prism 应用程序中的代码。

他们的模型的一部分是所有 WCF 服务调用都是同步执行的,但在后台线程上(实际上它们也是异步调用,但 Sculpture 后台线程方法在执行任何以下代码之前等待响应)。

当我们部署应用程序时,我们发现大约 50% 的测试机器无法通过第一次服务调用。我们在失败的机器上看不到任何模式,因为它们在工作和失败的机器上混合了调试和发布 Silverlight 运行时和 Windows 7。它在不同的浏览器上失败相同,因此是特定于机器的。唯一的线索是它们似乎都是旧电脑。

任何人的想法?

4

1 回答 1

1

找到了原因。他们生成的服务调用中有一个男生错误。

这张图有什么问题?:

while (true == userState.IsBusy)
{}

true ==忽略(在 C# 中不需要)的老派用法,基本上它们的while循环在某些机器上锁得太紧了,永远不会设置 IsBusy 状态。这也意味着无论何时进行服务调用,应用程序始终运行 100% 的处理器使用率。

我们通过在所有服务调用 while 循环中添加 Thread.Sleep(100) 解决了这个问题。例如:

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

我们的应用程序现在可以在所有支持 Silverlight 的机器上运行(应该如此),并且启动时使用的处理器要少得多。

公平地说,我们没有使用最新版本的雕塑,但在商业包中看到如此愚蠢的错误是相当令人惊讶的。

于 2010-10-06T09:58:49.553 回答