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

简介: 笔记

一、概述


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


二、Debug类


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


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


  • Debug.Write() 将有关调试的信息写入Listeners集合中的跟踪侦听器。有以下重载方法:

40.png

  • Debug.Assert(Bool) 如果条件为false,则输出消息,并显示一个消息框,其中显示调用堆栈。如果条件为true,则不会发送失败消息,也不显示消息框。

50.png

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

60.png


  • Debug.Fail(String) 发送错误信息及详细的错误信息
  • Debug.WriteLine 将有关调试的信息写入Listeners集合中的跟踪侦听器。

70.png

  • Debug.WriteLineIf如果条件为true,则将有关调试的信息写入Listeners集合中跟踪侦听器

80.png

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


二、Process 类


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


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


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


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

100.png101.png

Process类应用实例

 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 类的常用属性和方法简介

1.png

Stopwatch 类使用实例

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);
    }
}


目录
相关文章
|
C# Windows
【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思
原文:【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思 新建一个wpf的项目,我们先来看下它默认的命名空间都是哪些? 可以看到xmlns有的是网址,有的是clr-namespace开头的一串字母。
1740 0
|
C# 数据格式 XML
WPF使用其他命名空间中的类型
为使用未在WPF命名空间中定义的类,需要把.net命名空间映射 到一个XML命名空间 XAML有一个特殊的语法可用于完成这一工作。 语法: xmlns:prefix="clr-namespace:Namespace;assembly=AssemblyName" prefix:是希望在XAML标记中用于指示命名空间的XML前缀。
925 0
|
8月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
424 0
|
8月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
163 1
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
640 0
|
5月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
5月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
142 1
|
5月前
|
C# Windows
WPF中如何使用HandyCotrol控件库
WPF中如何使用HandyCotrol控件库
239 1
|
5月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
190 0
|
5月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
143 0