`
810364804
  • 浏览: 787863 次
文章分类
社区版块
存档分类
最新评论

.NET 内部效能插件

 
阅读更多

简介

这篇文章将介绍一个自制的简易插件。

因为在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: 储存最大内存用量。

代码下载


分享到:
评论

相关推荐

    亮剑.net图改asp.net网站开发实战源码.rar

    数据控制项运用、样板设计的使用时机探讨,会员数据表与现有数据表的整合,通过完整范例探讨多层架构系统与会员管理机制的整合,效能、缓存类与网页缓存设计,SqlCacheDependency与SQL Server数据缓存技术,事件记录...

    打造高效能的.NET應用程式

    打造高效能的.NET應用程式

    腾讯内部效能提升之路:DevOps测试中台的实践

    2020QECon全球软件质量&效能大会主会场, 殷柱伟先生做腾讯内部效能提升之路:DevOps测试中台的实践的报告PPT。供大家参考!

    asp.net mvc实战经验电子书

     1.快速上手、學習方法  2.協同開發、團隊分工 ...高效能的ASP.NET MVC網站  4.高執行效能  5.高開發效率  6.安全的ASP.NET MVC網站  7.單元測試的經驗分享  8.開發人員應注意的事  9.常見問題解答

    构建高性能可扩展ASP.NET网站PDF与源码(修正PDF)

    上次上传失误,没有包含PDF文档。包含构建高性能可扩展ASP.NET网站源码以及文档

    .Net平台高性能关键字过滤组KFilter.zip

    KFilter是.Net平台高性能的关键字过滤组件,它提供了灵活的过滤机制能自适应大小写,半全角,简繁和分隔符处理等。经测试组件在处理处理6000或更多关键词的情况下单线程每秒可以达到上千万字检索的效能。 关键字...

    提升保险行业内部审计效能的措施探讨

    提升保险行业内部审计效能的措施探讨

    高效能人士七个习惯课程内部分享

    高效能人士七个习惯课程内部分享

    基于Asp.net Core 3.1开发的权限管理系统.zip

    人力资源管理系统(HRM):涵盖招聘、培训、绩效考核、薪酬福利等人力资源全流程管理,提升人才效能。 客户关系管理系统(CRM):集中管理客户信息,优化销售、营销和服务流程,提升客户满意度和忠诚度。 供应链...

    效能管理系统 v2.0

    通过系统的部署和使用,能进一步规范单位内部管理、明确员工责任及目标、明确奖惩机制,有效提升员工的工作积极与主动性,最终使整个单位综合效能得以提升。1、工作计划模块。通过该模块管理者可对本部门或下属部门...

    带孔缝箱体电磁屏蔽效能的研究

    在简要介绍了电磁屏蔽效能的计算方法的基础上,针对带孔缝箱体内电磁场,详细分析了使用电磁仿真软件HFSS计算其电磁屏蔽效能的方法及结果。得出了一般性结论:箱内与孔缝距离不同的点,距离孔缝越远,屏蔽效能越好;屏蔽...

    内部审计与效能监察管理系统.doc

    内部审计与效能监察管理系统.doc

    ASP.NET 2.0-由初學邁向程式設計

    ASP.NET 2.0-由初學邁向程式設計 目錄: 第一章 ASP.NET2.0概論 第二章 ASP.NET的開發環境 ... 第四章 ASP.NET2.0程式設計基本觀念 ...第六章 規劃設計瀏覽性良好的...第十四章 網站狀態與效能 第十五章 程式追蹤與部署

    效能管理系统 v2.0.rar

    效能管理系统提供了工作任务“安排-...通过系统的部署和使用,能进一步规范单位内部管理、明确员工责任及目标、明确奖惩机制,有效提升员工的工作积极与主动性,最终使整个单位综合效能得以提升。 效能管理系统截图

    论文研究-系统效能指数和效能因子的计算模型与方法.pdf

    论文研究-系统效能指数和效能因子的计算模型与方法.pdf, 基于系统行为过程的效能概念框架及度量方法,建立了系统目标树的层级模型以及反映系统内、外因素行为关联关系的...

    效能管理系统 1.1.0.rar

    效能管理系统提供了工作任务“安排-接收-办理-打分”流程管理;跨部门工作协作“发起-接收-办理-确认”流程管理;员工违规与嘉奖行为记录打分管理;效能分析报表等功能,并通过短信、邮件实时为员工发送相关事项通知...

    .NET and XML(CHM)

    为高级开发人员提供了深度指导,包含了完整的有关XML在.NET架构中的参考资料,该书旨在帮助你理解这两种技术的交叉点,以最大化提升效能

    组织效能及人均效能指标大全.xlsx

    组织效能及人均效能指标大全.xlsx

Global site tag (gtag.js) - Google Analytics