.NET应用程序中的性能监控/指标我们希望在开发人员和客户站点中收集有关我们(例如80%WinApp)应用程序的性能数据。我们的目标如下:理想情况下,它也应该在站点范围内或逐个用户的基础上相对可配置以进行控制:我们一直在计划基本上编写我们自己的系统来完成大部分工作。我们正在研究许多不同的“持久性”模型,包括“性能数据包”的二进制格式、XmlSerialization和跟踪日志记录功能,它们已经是.NET框架的一部分,仅举几例。在我开始之前,我想仔细检查一下“人群”的建议。我已经描述了我们正在努力做的事情,基本上是我们目前的行动计划——但我正在寻找关于如何最好地解决手头问题的任何和所有建议。提前致谢。看看Metrics.NET,这个相对较新的项目应该可以满足您的大部分需求。它是Java的“指标”项目的一个端口。(2016年3月添加:)经过长时间没有更新,Metrics.NET项目已转移给新用户。您可以看看在StatsD之上构建一些东西:https://github.com/etsy/statsd/这里有一个.NET包:https://github.com/robbihun/NStatsD.Client它非常轻量级基本上只是将UDP数据包发送到远程服务器。该远程服务器然后将其聚合并将其存储在Graphite中,Graphite擅长获取这些数据并将其转换为图形,并为您管理数据保留等事情。对于分析,Graphite还允许您将数据输出为JSON(本质上是将您的指标转换为双精度数组),并且有许多函数和过滤器可以应用于记录的指标,然后您可以将其提供给其他系统。请参阅此处了解可能的Graphite实现的一些示例:http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring但它不会涵盖您的所有要求,例如能够记录有关客户端的数据,例如计算机名称。但是,您可以通过在指标名称中使用命名空间来实现这一点;因此,您将使用诸如“client567.orders.loadtime”之类的键记录您的指标,而“client567”将是Windows7上使用IE11的其他数据库中的条目。所以它不是一个完整的开箱即用的解决方案,但它构成了我认为的良好基础。另一种选择是使用像NewRelic这样的商业平台:http://newrelic.com/,它为许多技术(从ASP.NET到SQLServer再到Solr)提供性能监控。但是,它确实需要在后台运行的代理进程(Windows上的服务)来处理对您的监控,这可能适合您,也可能不适合您。它或多或少适用于Web服务器,可能不太适用于监视客户端WPF应用程序。按照您的计划,我采用了这种方法:您将所有性能数据写入日志文件。使用一种快速的C#日志记录库,如log4net或nlog。如有必要,这些框架支持二进制附加程序。当应用程序开始写入可用RAM、CPU等时,使用像PostSharp这样的方面注入器自动将计时器添加到应用程序中的每个(非内联)方法。秒表类对性能没有显着影响。为了使其可配置,方面注入器根据方法的估计优先级更改日志级别(或使用您自己的属性来指定它)。提示用户退出(或开始)将记录的性能数据发送到您的网络服务器。数据在输出时被压缩。您可能还想考虑编写自己的锁类。不要使用lock(blah)或Monitor.Enter(blah),而是将Monitor.Enter/Exit包装在您自己的一次性类中,该类记录您在进入锁定状态之前必须等待多长时间。我将从测试使用EventLog是否能解决我的问题开始。EventLog消息包含很多信息,您可以添加自己的信息。对于某些诊断,我会查看(自定义)性能计数器。我敢打赌,很难创造出性能超过Windows性能计数器的东西。重写这篇文章可能不值得。可能需要在事件查看器中创建特殊的过滤器以获得您正在寻找的输出或跨机器收集事件(您甚至可以编写自己的查看器)所有内容,如果它对您有用并且您需要了解更多关于C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
