简介
这篇文章将介绍一个自制的简易插件。
因为在release版用windows的task manager感觉很麻烦,每次都要找一下自己的程序,就临时想到乾脆做一个简单的小插件来玩玩。
如何使用
static void Main()
{
PerformanceDetector.Instance.initialize();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
PerformanceDetector.Instance.destroy();
}
开启工程中的Program.cs,然后于Main中加入两行代码。
PerformanceDetector.Instance.initialize();
PerformanceDetector.Instance.destroy();
将第一行代码加于Application.Run()之前,将第二行代码加于Application.Run()之后。
就可以在运行时透过Alt+Ctrl+M呼叫这个插件了。
关于这插件的构想
因为不喜欢每次都用Task Manager,就自己整个了内存监控的代码。
一开始只是想说做个在应用内监控内存使用量的代码。所以使用Process来获取内存使用量。
但又觉得每次都去打开Log档来看很麻烦,就想说做个UI来看好了。
然后又想说,那要怎么显示这个控件?想了想既不想做在Menu也不想用一个按钮或其他控件,最后就决定用快捷来处理了。
不过第一版没有仔细想好,搞了个占据了全部画面的控件。用了才发现这样也不能边操作边看用量,好吧,重做。
所以最后决定了,就用一个单一的窗口来显示,会比较乾净。
想说CPU使用量也可以一起监控,就顺便做了。
本来是有在考虑原本第一版做的比较详细的需不需要有,但后来想想目前似乎还用不到,于是最后做成这样。
这工具中使用的技术
第一个关于CPU的使用部分,用的是PerformaceCounter来处理的
theCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);
m_cpuUsage = (int)(theCPUCounter.NextValue() / Environment.ProcessorCount);
public PerformanceCounter(
string categoryName,
string counterName,
string instanceName )
我需要抓的是当前进程的CPU使用率,所以第一个参数用"Process",第二个参数用"% Processor Time",第三个进程则是用当前进程的名称。
利用Process.GetCurrentProcess().ProcessName取得。
只要呼叫PerformanceCounter.NextValue()就可以取得CPU使用率,并透过Enviroment.ProcessorCount来计算。
另外由于我是利用快捷键的方式来显示窗口。所以利用了Hook来拦截按键。
HookManager.Instance.RegisterHook(HookType.WH_KEYBOARD, new CustomHookProc.HookProcHandler(KeyboardHookProc));
void KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
KeyStateInfo ctrlKey = KeyboardInfo.GetKeyState(Keys.ControlKey);
KeyStateInfo altKey = KeyboardInfo.GetKeyState(Keys.Alt);
KeyStateInfo mKey = KeyboardInfo.GetKeyState(Keys.M);
if (ctrlKey.IsPressed && altKey.IsPressed && mKey.IsPressed)
{
showMonitorForm();
}
}
HookManager是我自己封装过的一个简易Hook类,只需透过注册事件即可使用。
最后是利用Process.WorkingSet64来取得进程内存。
Process currentProcess = Process.GetCurrentProcess();
currentProcess.WorkingSet64;
以及使用Process.Modules跟ProcessModule.ModuleMemorySize来取得相关DLL的使用内存。
ProcessModuleCollection myProcessModuleCollection = currentProcess.Modules;
// Display the 'ModuleMemorySize' of each of the modules.
ProcessModule myProcessModule;
for (int i = 0; i < myProcessModuleCollection.Count; i++)
{
myProcessModule = myProcessModuleCollection[i];
if (m_moduleMemorys.Keys.Contains(myProcessModule.ModuleName))
m_moduleMemorys[myProcessModule.ModuleName].update(myProcessModule.ModuleMemorySize);
else
{
MemoryInfo mem = new MemoryInfo();
mem.Name = myProcessModule.ModuleName;
mem.update(myProcessModule.ModuleMemorySize);
m_moduleMemorys[myProcessModule.ModuleName] = mem;
}
}
public class MemoryInfo
{
string m_name;
long m_currentUsage;
long m_maximumUsage;
public long MaximumUsage
{
get { return m_maximumUsage; }
set { m_maximumUsage = value; }
}
public long CurrentUsage
{
get { return m_currentUsage; }
set { m_currentUsage = value; }
}
public string Name
{
get { return m_name; }
set { m_name = value; }
}
public string GetCurrentKB()
{
return Convert.ToString(m_currentUsage / 1024.0);
}
public string GetMaximumKB()
{
return Convert.ToString(m_maximumUsage / 1024.0);
}
public void update(long current)
{
m_currentUsage = current;
if (m_currentUsage > m_maximumUsage)
m_maximumUsage = m_currentUsage;
}
}
在代码中,声明了一个简单的类,来储存信息。
Name
: 储存 ProcessModule.ModuleName。
CurrentUsage
: 储存现在内存用量。
MaximumUsage
: 储存最大内存用量。
分享到:
相关推荐
数据控制项运用、样板设计的使用时机探讨,会员数据表与现有数据表的整合,通过完整范例探讨多层架构系统与会员管理机制的整合,效能、缓存类与网页缓存设计,SqlCacheDependency与SQL Server数据缓存技术,事件记录...
打造高效能的.NET應用程式
2020QECon全球软件质量&效能大会主会场, 殷柱伟先生做腾讯内部效能提升之路:DevOps测试中台的实践的报告PPT。供大家参考!
1.快速上手、學習方法 2.協同開發、團隊分工 ...高效能的ASP.NET MVC網站 4.高執行效能 5.高開發效率 6.安全的ASP.NET MVC網站 7.單元測試的經驗分享 8.開發人員應注意的事 9.常見問題解答
上次上传失误,没有包含PDF文档。包含构建高性能可扩展ASP.NET网站源码以及文档
KFilter是.Net平台高性能的关键字过滤组件,它提供了灵活的过滤机制能自适应大小写,半全角,简繁和分隔符处理等。经测试组件在处理处理6000或更多关键词的情况下单线程每秒可以达到上千万字检索的效能。 关键字...
提升保险行业内部审计效能的措施探讨
高效能人士七个习惯课程内部分享
人力资源管理系统(HRM):涵盖招聘、培训、绩效考核、薪酬福利等人力资源全流程管理,提升人才效能。 客户关系管理系统(CRM):集中管理客户信息,优化销售、营销和服务流程,提升客户满意度和忠诚度。 供应链...
通过系统的部署和使用,能进一步规范单位内部管理、明确员工责任及目标、明确奖惩机制,有效提升员工的工作积极与主动性,最终使整个单位综合效能得以提升。1、工作计划模块。通过该模块管理者可对本部门或下属部门...
在简要介绍了电磁屏蔽效能的计算方法的基础上,针对带孔缝箱体内电磁场,详细分析了使用电磁仿真软件HFSS计算其电磁屏蔽效能的方法及结果。得出了一般性结论:箱内与孔缝距离不同的点,距离孔缝越远,屏蔽效能越好;屏蔽...
内部审计与效能监察管理系统.doc
ASP.NET 2.0-由初學邁向程式設計 目錄: 第一章 ASP.NET2.0概論 第二章 ASP.NET的開發環境 ... 第四章 ASP.NET2.0程式設計基本觀念 ...第六章 規劃設計瀏覽性良好的...第十四章 網站狀態與效能 第十五章 程式追蹤與部署
效能管理系统提供了工作任务“安排-...通过系统的部署和使用,能进一步规范单位内部管理、明确员工责任及目标、明确奖惩机制,有效提升员工的工作积极与主动性,最终使整个单位综合效能得以提升。 效能管理系统截图
论文研究-系统效能指数和效能因子的计算模型与方法.pdf, 基于系统行为过程的效能概念框架及度量方法,建立了系统目标树的层级模型以及反映系统内、外因素行为关联关系的...
效能管理系统提供了工作任务“安排-接收-办理-打分”流程管理;跨部门工作协作“发起-接收-办理-确认”流程管理;员工违规与嘉奖行为记录打分管理;效能分析报表等功能,并通过短信、邮件实时为员工发送相关事项通知...
为高级开发人员提供了深度指导,包含了完整的有关XML在.NET架构中的参考资料,该书旨在帮助你理解这两种技术的交叉点,以最大化提升效能
组织效能及人均效能指标大全.xlsx