【WPF系列】- System.Diagnostics命名空间

news/2024/5/19 21:44:52 标签: wpf, microsoft, asp.net, .netcore, c#

【WPF系列】- System.Diagnostics命名空间

文章目录

  • 【WPF系列】- System.Diagnostics命名空间
    • 一、概述
    • 二、Debug类
    • 二、Process 类
      • Process类的常用属性和方法简介
      • Process类应用实例
    • 三、Stopwatch 类
      • Stopwatch 类的常用属性和方法简介
      • Stopwatch 类使用实例

一、概述

在DotNet类库中System.Diagnostics命名空间,该命名空间提供了一些与系统进程,事件日志和性能计数器进行交互的类库。本节介绍几个比较常用的类,如果Debug类、Trace类、Process类、Stopwatch类

二、Debug类

Debug类提供一组有助于调试代码的方法和属性。在不影响性能和代码大小的情况下使代码更可靠,使用Debug中的方法打印调试信息,并使用断言检查逻辑。

Debug类提供显示Assert对话框的方法,并发出将始终失败的断言。此类提供以下几种方法:

  • Debug.Write() 将有关调试的信息写入Listeners集合中的跟踪侦听器。有以下重载方法:
方法名说明
Write(String,String)将类别名称和消息写入Listerers集合中的跟踪侦听器
Write(Object,String)将类别名称和对象的ToString()方法的值写入Listerers集合中的跟踪侦听器
Write(String)将消息写入Listeners集合中的跟踪侦听器
Write(Object)将对象ToString()方法的值写入Listeners集合中的跟踪侦听器
  • Debug.Assert(Bool) 如果条件为false,则输出消息,并显示一个消息框,其中显示调用堆栈。如果条件为true,则不会发送失败消息,也不显示消息框。
方法名说明
Assert(Boolean)检查条件;如果条件为false,则显示一个消息框,其中显示调用堆栈
Assert(Boolean,String)检查条件;如果条件为 false,则输出指定消息并显示指示调用堆栈的消息框。
Assert(Boolean,String,String)检查条件 ;如果条件为 false,则输出两条指定消息,并显示一个消息框,其中显示调用堆栈。
Assert(Boolean,String,String,Object[])检查条件;如果条件为false,则输出两条指定消息(简单消息和格式化消息),并显示一个消息框,其中会显示调用堆栈。

Debug.Assert方法仅使用于调试版本,Trace.Assert如果要在发布版本中执行断言,Assert(Boolean)方法用于识别程序开发期间的逻辑错误,Assert条件为false,则会向集合发送失败消息Listeners。可以通过向集合添加TraceListener或从Listeners集合中删除自定义此行为。

  • Debug.Fail(String) 发送错误信息及详细的错误信息
方法名说明
Fail(String)发出指定的错误信息
Fail(String,String)发出错误信息及详细的错误信息
  • Debug.WriteLine 将有关调试的信息写入Listeners集合中的跟踪侦听器。
方法名说明
WriteLine(String,String)将类别名称和消息写入Listeners集合中的跟踪侦听器
WriteLine(String,Object[])将后跟行结束符的格式化消息写入Listeners集合中的跟踪侦听器。
WriteLine(String)将后跟行结束符的消息写入Listeners集合中的跟踪侦听器。
WriteLine(Object)将对象ToString()方法的值写入Listeners集合中的跟踪侦听器。
WriteLine(Object,String)将类别名称和对象的ToString()方法的值写入Listeners集合中的跟踪侦听器。
  • Debug.WriteLineIf如果条件为true,则将有关调试的信息写入Listeners集合中跟踪侦听器
方法名说明
WriteLinelf(Boolean,Object,String)如果条件为true,则向Listeners集合中的跟踪侦听器写入类别名称和对象的ToString()方法值。
WriteLinelf(Boolean,Object)如果条件为true,则向Listeners集合中的跟踪侦听器写入对象的ToString()方法。
WriteLinelf(Boolean,String)如果条件为 true,则将消息写入Listeners集合中的跟踪侦听器
WriteLinelf(Boolean,String,String)如果条件为 true,则将类别名称和消息写入Listeners集合中的跟踪侦听器

可以使用语句而不是使用WriteLinelf(Boolean,String)语句来最大程度地降低检测应用程序If…Then的性能损失。

二、Process 类

Process类提供对本地和远程进程的访问权限并使你能够启动和停止本地系统进程。Process组件提供对计算机上正在运行的进程的访问权限。用最简单的术语说,进程是一个正在运行的应用。线程是操作系统分配处理器时间的基本单元。线程可以执行进程代码的任何部分吗,包括当前由另一个线程执行的部分。

组件Proccess是用于启动、停止、控制和监视应用的有用工具。可以使用Process组件获取正在运行的进程的列表,也可以启动新进程。组件Process用于访问系统进程。Process组件初始化后,它可用于获取有关正在运行的进程的信息。此类信息包含线程集、加载的模块以及进程正在使用的内存量等性能信息。

Process类实现IDisposable接口。在使用完类型后,应直接或间接释放类型。若要直接释放类型,请在try/finally 块中调用其Dispose方法。若要间接释放类型,请使用using或using等语言构造。

Process类的常用属性和方法简介

属性或方法说明
MachineName属性,获取关联进程正在其上运行的计算机的名称
Id属性,获取关联进程的唯一标识符
ExitTime属性,获取关联进程退出的时间
ProcessName属性,获取该进程的名称
StartTime属性,获取关联进程启动的时间
Threads属性,获取在关联进程中运行的一组线程
TotalProcessorTime属性,获取此进程的总的处理器时间
UserProcessorTime属性,获取此进程的用户处理器时间
Close()方法,释放与此组件关联的所有资源
CloseMainWindow()方法,通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程
Dispose()方法,释放由 Component 使用的所有资源
GetCurrentProcess()方法,获取新的 Process 组件,并将其与当前活动的进程关联
GetProcesses()方法,为本地计算机上的每个进程资源创建一个新的 Process 组件
GetProcesses(String)方法,为指定计算机上的每个进程资源创建一个新的 Process 组件
GetProcessesByName(String)方法,创建新的 Process 组件的数组,并将它们与本地计算机上共享指定的进程名称的所有进程资源关联
Kill()方法,立即停止关联的进程
Start()方法,启动(或重用)此 Process 组件的 Startinfo 属性指定的进程资源, 并将其与该组件关联
Start(String)方法,通过指定文档或应用程序文件的名称来启动进程资源,并将资源与新的 Process 组件关联

Process类应用实例

c#"> using (Process proc = new Process())
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    Console.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + ":" + file);
    proc.StartInfo.WorkingDirectory = file;
    proc.StartInfo.FileName = file + "process.exe";
    //proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//这里设置DOS窗口不显示,经实践可行
    //proc.StartInfo.CreateNoWindow = true;//不显示程序窗口

    proc.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
    proc.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
    proc.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
    proc.StartInfo.RedirectStandardError = true;//重定向标准错误输出
    proc.Start();//启动程序
                 //proc.StandardInput.WriteLine("exit");//向cmd窗口写入命令
    proc.StandardInput.AutoFlush = true;
    proc.WaitForExit();
    stopwatch.Stop();
    Console.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + ":" + file + ",共耗时:" + stopwatch.ElapsedMilliseconds / 1000d + "s");
    var msg = proc.StandardOutput.ReadToEnd();
    FileStream newFs = new FileStream(file + "Output/output.txt", FileMode.Append);
    StreamWriter sw = new StreamWriter(newFs, Encoding.ASCII);
    sw.Write(DateTime.Now);
    sw.Write(msg);
    sw.Flush();
    sw.Close();
    newFs.Close();
    proc.Close();
};

三、Stopwatch 类

Stopwatch类提供一组方法和属性,可用于准确地测量运行时间。Stopwatch可以测量一个间隔的已用的时间,或跨多个间隔测量已用总时间。在Stopwatch方案中,调用Start方法,然后最终调用Stop方法,然后使用属性检查经过的时间Elapsed。

Stopwatch类使用IsRuning确定Stopwatch当前状态,使用Start开始测量已使用时间;使用Stop停止测量已用时间。通过属性Elapsed,ElapsedMilliseconds或ElapsedTicks查询已使用时间值。可以在实例正在运行或停止时间已用时间属性,运行时,经过的时间属性会稳步增加Stopwatch;在实例停止时他们保持不变。

默认情况下,实例已用时间等于所有测量时间间隔的总和Stopwatch.每次调用Start在积累已用时间开始计数;每次调用结束Stop当前间隔量并冻结累积已用时间值。Reset使用方法清除现有Stopwatch实例中累积已用时间。

通过Stopwatch对基础计时机制中的计时器周期进行计算来度量已用时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量已用时间。否则, Stopwatch 类使用系统计时器来测量已用时间。

Stopwatch 类的常用属性和方法简介

属性或方法说明
Elapsed获取当前实例测量得出的总运行时间。
ElasedMIlliseconds获取当前实例测量得出的总运行时间(以毫秒为单位)。
ElasedTicks获取当前实例测量得出的总运行时间(用计时器刻度表示)。
IsRunning获取一个值,该值表示Stopwatch计时器是否正在运行。
Reset()停止时间间隔测量,并将运行时间重置为零
Restart()停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间
Start()开始或继续测量某个时间间隔的运行时间。
StartNew()初始化新的Stopwatch实例,将进行时间属性设置为零,然后开始测量运行时间。
Stop()停止测量某个时间间隔的运行时间

Stopwatch 类使用实例

c#">using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        Thread.Sleep(10000);
        stopWatch.Stop();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
        Console.WriteLine("RunTime " + elapsedTime);
    }
}

http://www.niftyadmin.cn/n/5186928.html

相关文章

【918.环形子数组的最大和】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {int sum0;for(auto x:nums) sumx;vector<int> f(nums.size());vector<int> g(nums.size…

【精选】JavaScript语法大合集【附代码和超详细介绍以及使用】

JavaScript语法大合集 JavaScript引入到文件 嵌入到HTML文件中 <body><script>var num10;console.log(num);</script> </body>引入本地独立JS文件 <body><script src"./hello.js"></script> </body>引入网络来源…

【数据下载】FileZilla安装及使用说明:以全球NCEP 再分析数据集为例

1 简介# 1 简介 FileZilla是一个免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。 1.1 下载地址 File Zilla官网下载 1.2 安装过程 下载完成后&#xff0c;界面如下&#xff1a; 2 使用 2.1 主机设置 2.2 下载数据 全球N…

leetcode:链表的中间结点

1.题目描述 题目链接&#xff1a;876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 我们先看题目描述&#xff1a; 2.解题思路 我们用画图用快慢指针来解决这个问题 定义一个快指针fast&#xff0c;一个慢指针slow 快指针一次走两个结点&#xff0c;慢指针一次…

数据指标体系建设思路

目录 一、如何构建指标体系 什么是指标体系? 指标体系作用? 如何构建指标体系?

Android 13.0 recovery出厂时清理中字体大小的修改

1.前言 在13.0的系统rom定制化开发中,在recovery模块也是系统中比较重要的模块,比如恢复出厂设置,recovery ota升级, 清理缓存等等,在一些1080p的设备,但是density只是240这样的设备,会在恢复出厂设置的时候,显示的字体有点小, 产品要求需要将正在清理的字体调大点,这…

【408】计算机学科专业基础 - 操作系统

一、计算机系统概述 1.简介 什么是操作系统&#xff1f; 操作系统&#xff08;Operating Ststem&#xff0c; OS&#xff09;是指控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#xff0c;以提供给用户和其他软件方便的接口…

自建ES7.10集群,使用OSS快照恢复数据测试

一、云上集群创建仓库 前置条件 创建云OSS bucket lcsc-es-snapshot,并获取到access_key_id,secret_access_key信息 授予oss bucket lcsc-es-snapshot相关方完全控制权限 创建一个名称为my_backup的仓库。 云上集群创建仓库。PUT _snapshot/my_backup/ {"type": &qu…