【问题标题】:WCF Startup performance in Silverlight 4Silverlight 4 中的 WCF 启动性能
【发布时间】:2011-01-30 21:02:30
【问题描述】:

我正在运行一个 Silverlight 4 应用程序,该应用程序有一个 WCF 服务引用,该服务引用了涉及大量合同的服务。

我注意到我的启动性能很糟糕,所以我对其进行了分析,发现在第一次 WCF 调用上生成序列化代码花费了 7 秒的时间。

我知道有一种方法可以通过使用 XmlSerializer (explained here) 来缩短启动时间。这是通过提前将序列化代码生成到单独的程序集中来完成的,但我似乎无法弄清楚如何在 Silverlight 中执行此操作。

以前有人做过吗?甚至可能吗?也欢迎任何其他可能有帮助的想法。

谢谢。

【问题讨论】:

    标签: .net silverlight wcf performance xml-serialization


    【解决方案1】:

    您链接到的文章描述了如何使用 svcutil.exe 预生成类,但如果您使用 Visual Studio 或 WCF RIA 服务中的“添加服务引用”对话框,则此代码生成已经为你做了。所以这不是我寻求任何性能提升的地方。无论如何,7 秒似乎太长了,除非你有数以千计的不同课程,你正试图启动。我强烈怀疑你有一个完全不同的问题。任何需要 7 秒的操作要么是算法限制的,要么是 IO 限制的。我敢打赌,这就是 I/O:要么是到达 WCF 服务的网络 I/O,要么可能是从 WCF 服务到它自己的数据源的 I/O。加载某种嗅探器(Wireshark、Firebug、类似的东西),并更好地了解网络上发生的情况。无论如何,这就是我要开始的地方。

    【讨论】:

    • 我很肯定它是序列化代码。运行这行代码需要 7 秒 - new XmlSerializer(typeof(Request)); Request 类上定义了大约 100 个 XmlIncludeAttribute。因此,为 Request 类生成序列化代码意味着为 100 个其他类生成代码。所以我真的在寻找一种将 sgen.exe 与 Silverlight 一起使用的方法。
    • 好点。事实证明,我对序列化的了解并没有我想象的那么多。但是在四处寻找之后,您是否有理由在 WCF 合同上使用 XmlSerializer 而不是 DataContractSerializer? DCS 据说已经过优化以避免 XmlSerializer 启动问题。
    • 好建议,但我试过了,但我认为它不会奏效。 DataContractSerializer 似乎有一套更严格的规则,所以当我尝试使用 slsvcutil.exe /serializer:DataContractSerializer 生成服务引用时......我遇到了与此相同的故障 - stackoverflow.com/questions/906082/…
    【解决方案2】:

    事实证明,如果您使用Advanced Developer Extensions,您将不会遇到与添加 WCF 引用时相同的启动性能问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2011-04-16
      相关资源
      最近更新 更多