Articles of 性能

计算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 *,但希望直接查找正确的名称(如果可能)。

CreateFileMapping,MapViewOfFile,如何避免阻塞系统内存

我正在开发针对桌面系统的应用程序,它可能只有256MB RAM(Windows 2000以上)。 在我的应用程序中,我有这个大文件(> 256MB),其中包含约160字节/每个的固定logging。 这个应用程序有一个相当漫长的过程,随着时间的推移,它将随机访问大约90%的文件(用于阅读和写作)。 任何给定的logging写入不会超过特定logging的读取次数(我可以调整该值)超过1,000条logging。 我有两个明显的select这个过程:常规I / O(FileRead,FileWrite)和内存映射(CreateFileMapping,MapViewOfFile)。 后者应该在有足够内存的系统中效率更高,但是在内存不足的系统中,它会将大部分其他应用程序的内存换掉,这在我的应用程序中是不可能的。 有没有办法阻止进程消耗所有的内存(例如,强迫刷新我不再访问的内存页面)? 如果这是不可能的,那么我必须诉诸于正常的I / O; 我希望在写作部分使用重叠的I / O(因为访问是随机的),但是文档说less于64K的写入总是同步服务 。 任何改进I / O的想法都是受欢迎的。