Articles of 性能

使用wevtutil安装WPT清单时出现问题

我试图将性能计数器和自定义事件添加到一个软件,以便我可以使用Windows Performance Toolkit程序(如XPerf和GPUView)查看这些程序。 我将竭尽全力克制自己的力量,对软件文档的状态发起一场激烈的咆哮,现在我浪费时间试图从网上取笑线索。 我将描述我如何到达现在的位置,以防万一这对其他迷失的灵魂有用。 到目前为止,我已经收集到我必须为我的性能计数器和事件编写事件清单。 您可以通过手动或使用名为“ ecmangen.exe ”的工具来完成此操作。 该程序的文档为事件创build清单提供了一个很好的一步一步的指南,但不解释如何将这些与您的代码集成。 就我而言,下一步就是使用两个神秘的命令行应用程序“ MC.exe ”和“ CTRPP.exe ”。 这些似乎分别生成C或C#头文件,源文件和资源文件,用于将事件和计数器检测添加到代码中。 接下来,你必须build立你的代码(查看'C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ winbase \ Eventing'中的示例),然后我们来到目前卡住的地方:正确使用下一个神秘工具“ wevtutil.exe ” 这个工具需要两件事情:你用它编译的二进制文件(exe或者DLL)和你用来生成这些资源的清单文件。 我遇到的麻烦是对二进制文件的位置非常挑剔,我一直无法确定这种挑剔的forms。 咒语和山羊牺牲没有结果。 如果清单文件中的'provider'标签的'resourceFileName'字段中定义了一个path,例如'c:\ MYDIR \ TEd.exe',那么就可以了。 但是,如果我把相同的exe文件放在一个不同的文件夹(失败的是C:\ tw \ TEd.exe),它会报错。 给出的错误信息是“警告:发布者TEd-Event-Provider资源不可访问”。 但没有更多的解释,为什么,或试图看看。 那么,我是否会以错误的方式添加检测工具,是否已经有了一个指导来解释所有的问题,以及“wevtutil.exe对目录名称的奇怪select性的性质是什么。 提前致谢, 蒂姆。

计算Windows进程的CPU使用率?

给定一个进程ID,我怎样才能从这个进程的C#加载CPU的负载? 我已经尝试使用PerformanceCounter在c#中所述计算特定应用程序的CPU使用率 我还尝试在一个时间范围内手动取得进程的总CPU时间的两个值,并将delta-cpu-time与delta-total-time分开。 这两种方法似乎一开始工作正常,但如果我把我的应用程序旁边的Windows任务pipe理器我的应用程序总是显示约两倍的任务pipe理器。 我试图用10ms到10sec的各种时间步长进行更新,并一直得到相同的结果。 嗯,当我写这个时,意识到这可能是某种双核问题。

为性能计数器安装一个Total实例

VS 2005,C#2.0,.NET 2.0 / 3.0,Win2003 我正在尝试为MultiInstance安装一组性能计数器。 我注意到,即使没有其他实例,一些系统性能计数器类别也能保持“ 总计 ”状态。 ASP.NET应用程序2.0.50727是一个例子。 所以我一直在试图复制这个。 我在Installer类中创build了以下例程,然后将其添加到安装项目中的自定义操作中。 public override void Install(System.Collections.IDictionary stateSaver) { //Debugger.Break(); CounterCreationData data = new CounterCreationData("ZCounter", "ZCtrHelp", PerformanceCounterType.NumberOfItems32); PerformanceCounterCategory.Create("ZCategory", "ZCatHelp", PerformanceCounterCategoryType.MultiInstance, new CounterCreationDataCollection(new CounterCreationData[] { data })); PerformanceCounter counter = new PerformanceCounter(); counter.CategoryName = "ZCategory"; counter.CounterName = "ZCounter"; counter.InstanceName = "ZTotal"; counter.InstanceLifetime = PerformanceCounterInstanceLifetime.Global; counter.ReadOnly = false; […]

Thread.Sleep(0):什么是正常的行为?

为了理解Thread.Sleep(0)在OS上强制上下文切换。 我想查看在接收一些CPU时间之前可以传递给应用程序的最大时间。 所以我构build了一个在while循环(c#)中执行Thread.Sleep(0)的应用程序,并计算每次调用之间传递的时间。 当这个应用程序是唯一在双核心testingPC上运行的应用程序时,最大观察时间正好在1毫秒(平均为0.9微秒),它使用所有可用的CPU(100%)。 当我沿着CPU填充虚拟应用程序(全部具有相同的优先级)运行它时,最大时间约为25ms,平均时间为20ms。 它的行为完全如我所料。 时间非常稳定。 每当CPU获得一些CPU时间时,立即将控制权交还给需要处理的人,这就像热土豆游戏(CPU使用率下降到0%)。 如果没有其他应用程序正在运行,则控件立即返回。 鉴于此行为,我预计此应用程序对运行实际应用程序的计算机具有最小的影响。 (并给我实际的“延迟”,我期望看到在那里运行的应用程序)。 但令我惊讶的是,这确实影响了(以可观察的方式)这个特定系统的performance。 我是否错过了有关Thread.Sleep(0)的一些重要观点? 作为参考这里是这个应用程序的代码 private bool _running = true; private readonly Stopwatch _timer = new Stopwatch(); private double _maxTime; private long _count; private double _average; private double _current; public Form1() { InitializeComponent(); Thread t = new Thread(Run); t.Start(); } public void Run() { while(_running) { […]

推荐用于Windows的MySQL调整工具

我一直在Linux上使用MySQL Tuner(http://mysqltuner.com)一段时间,并且对它很满意。 现在,无论出于何种原因,我们不得不在IIS上托pipe其他网站。 是否有一个类似的调整工具,可以推荐在Windows Server 2008上对MySQL进行configuration更改? 亲切的问候

可从Java访问的Linux中的registry级别计数器

我正在寻找类似于Windows中的自定义计数器的Linux系统中的计数器,这些计数器可以通过C#访问。 (http://msdn.microsoft.com/en-us/library/aa326924%28v=vs.71%29.aspx)。 我的用例是这样的:我有一个从位置A到B导入文件的过程。这个文件有一些XMLlogging需要parsing并加载到数据库中。 我想有计数器,我可以不断增加,例如,每当在B收到一个新的文件,并且每当一个logging被导入到数据库。 我想定期logging这些计数器值,以检测出任何不一致。 当我使用Windows + C#的时候,我习惯使用自定义计数器(参考上面的链接)来做到这一点,但是我怎样才能在Linux + Java中做到这一点? 谢谢你的帮助..

为什么Mongodb在Linux上比在Windows上性能更好?

我创build了一个程序来testing在Linux(Ubuntu)和Windows(Server2008)上的分片MongoDB性能。 由于插入大量的logging,Windows的磁盘的活动时间非常高(100%),然后性能非常差。 但在Ubuntu上,磁盘的util%为60%〜70%,性能比Windows好。 我可以在Linux上更好地说MongoDB的性能吗?

捕获Xperf中的callstack和事件

对于这个愚蠢的问题抱歉。 我是Xperf的新手。 我在64位Windows 8.1上,我的应用程序也是x64。 我想在应用程序中使用Xperf捕获这两个调用堆栈和我定义的事件。 我在我的应用程序中注册了GUID 35f7872e-9b6d-4a9b-a674-66f1edd66d5c 。 当我使用时: xperf -on PROC_THREAD+LOADER+Base -start UserSession -on 35f7872e-9b6d-4a9b-a674-66f1edd66d5c -BufferSize 1024 -stackwalk profile 我可以得到所有的事件,但没有调用堆栈。 但是,如果我删除-on 35f7872e-9b6d-4a9b-a674-66f1edd66d5c并且命令行变成: xperf -on PROC_THREAD+LOADER+Base -start UserSession -BufferSize 1024 -stackwalk profile 这样,我能够捕获所有的调用堆栈,但没有定义的事件。 任何人都可以告诉我什么是正确的命令行来捕获调用堆栈和事件? 此外,如果你能指出我的任何好的Xperf参考,它会更大。

为什么Windows不适合实时系统/高性能服务器?

我希望这个问题不是太主观,但为什么Windows被认为是不适合实时系统和高性能服务器的操作系统呢? 是否有任何技术论文或研究比较* nix替代品的性能? 我从来没有听说过为什么开发人员反对将Windows用于这些types的系统,除了极其常见的“Windows不是一个实时操作系统”的声明,就好像这是一种众所周知的事实,需要说明理由。 请注意,我询问的是Windows CE / Windows Server,而不是操作系统的桌面版本。

性能监视器.NET CLR Networking 4.0.0.0实例命名

我试图使用性能计数器确定多less字节我的应用程序已发送或接收。 我按照这里提供的build议解决scheme: 计算带宽 ,但我的应用程序的实例不显示在“.NET CLRnetworking”类别。 exception消息: “实例”ApplicationName [8824]“在指定的类别中不存在” (我已经在我的App.config中添加了<performanceCounters enabled="true"/> ,并且在一些networking活动之后仍然无法find它) 所以我开始使用性能监视器,亲眼看到错误。 正如所料,我的应用程序不会出现在.NET CLR Networking类别中,但可以在.NET CLR Networking 4.0.0.0类别中find。 但是,我的问题是,我不知道如何生成实例名称。 以下是我在性能监视器中看到的实例的名称: ApplicationName.exe_p4952_r15_ad1 。 到目前为止,我已经知道第一部分必须由ProcessName和PID组成 ,但是我不知道最后两个部分( “r15”和“ad1” )是从哪里来的。 有人知道最后两件是什么吗? 一种解决scheme是枚举在“.NET CLR Networking 4.0.0.0”类别中find的所有实例,并searchApplicationName.exe_PID *,但希望直接查找正确的名称(如果可能)。