【问题标题】:AXL API - Extremely long processing time of CS fileAXL API - CS 文件的处理时间极长
【发布时间】:2018-03-06 13:43:36
【问题描述】:

只需要一个指向正确方向的点。

我已经按照 Cisco 提供的说明创建了 Cisco Unified Call Manager API,用于 CUCM 的 API 称为 AXL。 它目前在我的 C# WPF 项目中并且工作正常(我已经成功检索了一些电话数据),问题是 API 位于一个 345K 行长的单个 CS 文件中。当我尝试使用 API 进行第一个操作时(在它编译后),这会导致非常长的延迟。

正如思科论坛上的一位用户所建议的:

很有可能您的问题在于 .net 框架生成 xml 序列化程序集所花费的时间。

在 .net 上使用 AXL 时预先生成 xml 序列化程序集,您的第一个响应会快得多。

我尝试使用来自this 线程中的用户brain backup 的说明预先生成它。不幸的是,API 的第一次使用仍然是大约 45 秒(它确实减少了大约一分钟)。我对 Visual Studio 中的调试工具不是非常精通,因此不确定如何检查究竟是什么导致了问题(但它确实看起来像是与生成 XML 相关的问题)。

我想知道是否有人可以推荐一种方法来从 CS 文件中删除不必要的方法(其中 99% 无论如何都不会使用),而无需手动重新创建它。任何可以从 CS 文件中提取/删除方法及其依赖项的工具都非常出色。

【问题讨论】:

  • 45 秒长得离谱,但它是一个神奇的数字。这是大多数机器上默认的 TCP/IP 连接超时。使用 SysInternals 的 TcpView 实用程序查看谁被调用。
  • 有时间我会看看 TcpView。不幸的是,我不认为这是一个超时问题,因为 Visual Studio 中的调试器显示了一堆垃圾收集、持续 20% 的 CPU 使用率和 RAM 增加:i.imgur.com/ydPbUVw.png 小缺口是最终返回结果的地方,CPU 使用率也回到空闲状态。返回的数据并不多,相同代码的进一步运行只需要一秒钟。
  • 嗯,它肯定在某事上非常努力。当需要这么长时间时,您可以使用简单的代码分析。使用 Debug > Break All 并查看调用堆栈,必要时多看几次。

标签: c# wpf visual-studio cisco-axl


【解决方案1】:

有一种方法可以检查您的方法是否已使用,如果使用了多少次以及在哪里检查。

https://visualstudiomagazine.com/Blogs/Tool-Tracker/2014/12/Finding-Method-Property-Variable.aspx

【讨论】:

  • 这很好,不幸的是,我会在每个方法中单击数百次,与仅复制方法并继续填写引用的编译错误相比,它最终会花费相同的时间不见了。
【解决方案2】:

削减 AXL WSDL 本身并重新编译可能是有意义的 - 如前所述,您不太可能在整个架构附近的任何地方使用。

您应该能够只编辑 AXLAPI.wsdl 并删除除您实际使用的项目之外的所有 和 元素。

【讨论】:

    【解决方案3】:

    有同样的问题,延迟几乎无法使用。我发现有两件事可以立即解决这个问题。

    1. 不要使用 WSDL。编写您自己的方法来处理 SOAP 请求。耗时且容易出错,但结果几乎是立竿见影的。

    2. 使用可以处理大型文本文件的工具(如 Notpad++)打开您的 WSDL 生成的代码文件,并仅取出您需要的方法。这是我选择的方法,效果很好。

    另外,我相信您可以只使用 executeSQLQuery 方法并删除其余代码的大部分,但我还没有尝试过。上面的每种方法我都尝试过,没有预先生成 xml 序列化。我发现问题出在生成的 C# axl 代码文件大小上。

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2015-02-12
      • 2018-10-13
      相关资源
      最近更新 更多