C# 诊断.NET遗留问题

C# 诊断.NET遗留问题,c#,.net,profiling,diagnostics,legacy-app,C#,.net,Profiling,Diagnostics,Legacy App,假设您正在接管一个遗留的.NET应用程序。用C写的# 在评估应用程序的运行状况时,您会采用什么样的前5个诊断度量(评测或其他)呢 我不仅在看诊断的“什么”部分,而且在看“如何”部分。例如,确实有必要评估应用程序的快速/最佳响应时间。。。但是,有没有一种方法可以通过对代码库进行技术诊断来建立/衡量它,而不仅仅是获得用户体验反馈 (来源:) 是的,你一定会使用一些很棒的工具来达到这个目的……如果你也列出它们,那就太好了。这些不是编码技巧或分析建议,而是用任何语言评估程序运行状况的一般方法。按重要性

假设您正在接管一个遗留的.NET应用程序。用C写的#

在评估应用程序的运行状况时,您会采用什么样的前5个诊断度量(评测或其他)呢

我不仅在看诊断的“什么”部分,而且在看“如何”部分。例如,确实有必要评估应用程序的快速/最佳响应时间。。。但是,有没有一种方法可以通过对代码库进行技术诊断来建立/衡量它,而不仅仅是获得用户体验反馈


(来源:)


是的,你一定会使用一些很棒的工具来达到这个目的……如果你也列出它们,那就太好了。

这些不是编码技巧或分析建议,而是用任何语言评估程序运行状况的一般方法。按重要性排序

  • 最终用户对此满意吗
  • 它稳定吗
  • 它健壮吗
  • 它快吗
  • 内存占用是否长期稳定,以及我所期望的情况

  • 如果以上5个问题的答案都是肯定的,那么你的申请就很健康。我认为1-3是最重要的。它的内部可能不好看,也可能很难看,但如果它符合这些规范,并且应该永远保持传统模式(即小错误修复),那么它是健康的。

    我建议在某些区域编写测试。我不是单元测试的超级粉丝——尽管我最终写了很多单元测试。我更喜欢测试系统部分的系统测试——因此从域到域,从服务到演示者,等等,不一定是整个系统,而是部分系统。如果您正在寻找效率,那么这些测试可能会在代码周围运行秒表,如果时间过长,则会失败

    另一个好方法是通过RedGate的ANTs Profiler运行标准任务,或者通过Jetbrains的dotTrace运行标准任务。它会告诉您所花的时间以及运行了多少次,这意味着您可以看到哪里可以进行优化/缓存

    如果您使用的是NHibernate,那么NHProf非常棒(或者我认为Ayende现在发布了UberProf,它涵盖了更多的数据库访问策略)。这将警告您任何愚蠢的数据库访问正在进行。如果仅使用SQL Server探查器(SQL Server profiler)失败,可能会显示您一次又一次地请求相同的数据,但需要花费更多的精力过滤掉垃圾。如果您最终使用了它,那么您可以将它保存到一个DB表中,然后以更智能的方式进行查询

    如果您正在寻找健壮性,那么最好使用日志记录策略—捕获所有异常并记录它们。使用log4net进行设置非常简单。如果你遇到了一些你有点怀疑的问题,也要记录下来。然后将它运行到一个服务器(我使用kiwi syslog server,它易于设置,功能非常强大),它可以写入数据库,您可以对结果进行分析。我建议不要使用log4net的ADO.NET appender,因为它不是异步的,因此会减慢应用程序的速度

    最后,根据应用程序是什么,如果你真的很想花一些时间来测试它的健康状况,你可以使用WaTINWinforms等价物来测试前端。这甚至可能是一个长时间的测试,在应用程序被使用时观察应用程序的内存/处理器使用情况。如果您不那么担心,那么windows性能分析器将允许您在使用应用程序时查看应用程序的各个方面。总是有用的,但是你必须仔细研究才能得到有用的指标


    希望这能有所帮助。

    我要研究的前两大问题是:

  • 通过日志记录添加全局异常处理,以及搜索任何可能“吞咽”异常的异常处理,隐藏应用程序的问题(我认为还有一个windows性能计数器,它将公开应用程序每秒抛出的异常数)。这有助于发现应用程序中任何潜在的数据一致性问题
  • 向应用程序可能正在使用的任何数据持久性和/或外部网络服务依赖项添加一些性能监视和日志记录,例如记录数据库查询或完成web服务调用所需的时间超过X
  • 1.用户感知 我要做的第一件事就是简单地调查用户。记住,他们是我们为之做这件事的人。无论一个应用程序看起来有多么可怕,如果用户喜欢它(或者至少不主动讨厌它),那么你就不想立即开始把它拆开

    我想问一些问题,比如:

    • 它运行平稳吗
    • 它容易使用吗
    • 当你使用它时,你是否有信心它能实现你的期望
    • 它是宝马、思域还是平托
    答案是主观的。没关系。在这一点上,我们只是在寻找广泛的趋势。如果绝大多数用户说它总是崩溃,或者他们害怕执行基本任务,那么你就有麻烦了

    如果该应用程序滋生迷信,你会听到诸如“它似乎在周四早上会消失”或“我不知道这个按钮做什么,但除非我先点击它,否则它不会工作”之类的话,那就快跑吧

    2.文档 缺少文档,或者文档已经非常过时,这肯定是一个有问题的应用程序的迹象。没有文档说明意味着开发人员偷工减料,或者在不断的死亡游行中工作过度,以至于他们找不到时间做这种“不必要的”工作

    我说的不是用户手册——一个设计良好的应用程序不应该需要它们——我指的是技术文档、架构外观、组件功能、环境依赖性等等