我之前使用过性能分析器,但从未用于如此复杂的应用程序





0/5 (0投票)
Adam Marciniec 的代码遇到了严重的性能下降问题,因此他使用 ANTS Profiler 寻找瓶颈。 通过它,他找到了导致性能问题的特定方法。 了解他如何解决问题并提高其应用程序的性能。
我的公司与建筑商合作,在新住宅开发项目中销售安全和 AV 产品。 我们有很多不同的客户——数百家不同的建筑公司和拥有数百栋房屋的开发项目——所有这些都具有不同的配置、要求以及销售和折扣结构。
我们正在构建一个新的销售系统来管理所有这些复杂性。 销售人员拥有离线工作的智能客户端。 产品和产品线的管理是通过一个独立的 Windows 应用程序集中完成的,该应用程序使用 LINQ 访问 SQL Server 后端。
痛苦的验证时间
最大的挑战之一是管理应用程序中的产品验证逻辑——一个强大的验证方案,确保对产品的所有更改都根据描述不同构建商和最终客户要求的业务规则进行验证。 防止产品错误传播给销售人员至关重要。
最初,验证代码运行良好,但随着测试数据量的增长,更改的验证时间飙升至 10 分钟。 它总是能正确完成,所以我知道没有逻辑问题。
寻找热点
我们有 VS Team System,所以我启动了 VSTS Profiler,但它基本上没用。 它显示了运行验证代码所需的时间和使用的内存量,但没有直接细分到特定问题区域。
我之前在另一家公司使用过 ANTS Profiler,所以我下载了最新版本并分析了我的代码。 在进入验证代码之前,应用程序中有很多加载,但时间线让我能够缩小到特定的问题区域。 此外,选择各个线程的能力也很有用,因为验证过程被分解成一个工作线程以防止 GUI 冻结。
一个方法显示为热点,有 14,000 次命中,而其他方法只有几百次。 这种方法使用 LINQ 执行包含大量 JOIN 的复杂查询。
解决方案是调整数据库结构以消除不必要的 JOIN,将查询时间缩短到大约 10 秒。
理解,而不仅仅是调试
我之前使用过性能分析器,但从未用于如此复杂的应用程序。 使用 ANTS Profiler 时间线很容易找到特定线程上的确切问题。 我喜欢它在问题区域上打上大红旗的事实。 同时,我发现了更多关于验证代码实际工作方式的信息——这使用普通调试很难做到。