我们希望收集关于我们(比如80%的WinApp)应用程序的性能数据,无论是在开发单元内部,还是在客户站点。我们的目标如下:
理想情况下,它还可以在站点范围内或按用户进行相对可配置,以便控制:
我们一直在计划编写我们自己的系统来完成大部分工作。然后,我们将查看许多不同的“持久性”模型,包括“性能数据包”的二进制格式、XmlSerialization和已经是.NET框架一部分的跟踪日志功能,仅举几个例子。
不过,在做这件事之前,我想再检查一遍,看看“人群”有什么建议。我已经描述了我们正在尝试做的事情,基本上是我们当前的行动计划--但我正在寻找any和所有关于如何最好地解决手头问题的建议。
提前谢谢。
发布于 2014-02-05 19:48:09
请看一看Metrics.NET,这是一个相对较新的项目,应该满足大部分这些需求。这是Java‘度量’项目的一个端口。
(新增2016年3月:) Metrics.NET项目已经转移到新的人后,长期没有更新。
发布于 2014-02-06 04:27:11
您可以看看如何在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”这样的键记录您的度量,例如,在其他数据库中存储client567在Windows 7上使用IE11的条目。
所以这不是一个完全的开箱即用的解决方案,但我认为它是一个很好的基础。
另一种选择是使用诸如NewRelic这样的商业平台:
它附带了许多技术的性能监视(从ASP.NET到Server到Solr)。但是,它确实需要在后台运行代理进程(Windows上的一个服务)来为您处理监视,这可能是一个选项,也可能不是一个选项。它或多或少是针对WPF服务器的,可能不太适合监视客户端WPF应用程序。
发布于 2012-08-04 05:12:38
按照你的计划,我会采取这样的方法:
您还可以考虑编写自己的锁类。与其使用lock(blah)
或Monitor.Enter(blah)
,不如在您自己的一次性类中封装Monitor.Enter/Exit,该类记录您需要等待多长时间才能进入锁。
https://stackoverflow.com/questions/11805188
复制相似问题