一、概述
在DotNet类库中System.Diagnostics命名空间,该命名空间提供了一些与系统进程,事件日志和性能计数器进行交互的类库。本节介绍几个比较常用的类,如果Debug类、Trace类、Process类、Stopwatch类
二、Debug类
Debug类提供一组有助于调试代码的方法和属性。在不影响性能和代码大小的情况下使代码更可靠,使用Debug中的方法打印调试信息,并使用断言检查逻辑。
Debug类提供显示Assert对话框的方法,并发出将始终失败的断言。此类提供以下几种方法:
- Debug.Write() 将有关调试的信息写入Listeners集合中的跟踪侦听器。有以下重载方法:
- Debug.Assert(Bool) 如果条件为false,则输出消息,并显示一个消息框,其中显示调用堆栈。如果条件为true,则不会发送失败消息,也不显示消息框。
Debug.Assert方法仅使用于调试版本,Trace.Assert如果要在发布版本中执行断言,Assert(Boolean)方法用于识别程序开发期间的逻辑错误,Assert条件为false,则会向集合发送失败消息Listeners。可以通过向集合添加TraceListener或从Listeners集合中删除自定义此行为。
- Debug.Fail(String) 发送错误信息及详细的错误信息
- Debug.WriteLine 将有关调试的信息写入Listeners集合中的跟踪侦听器。
- Debug.WriteLineIf如果条件为true,则将有关调试的信息写入Listeners集合中跟踪侦听器
可以使用语句而不是使用WriteLinelf(Boolean,String)语句来最大程度地降低检测应用程序If…Then的性能损失。
二、Process 类
Process类提供对本地和远程进程的访问权限并使你能够启动和停止本地系统进程。Process组件提供对计算机上正在运行的进程的访问权限。用最简单的术语说,进程是一个正在运行的应用。线程是操作系统分配处理器时间的基本单元。线程可以执行进程代码的任何部分吗,包括当前由另一个线程执行的部分。
组件Proccess是用于启动、停止、控制和监视应用的有用工具。可以使用Process组件获取正在运行的进程的列表,也可以启动新进程。组件Process用于访问系统进程。Process组件初始化后,它可用于获取有关正在运行的进程的信息。此类信息包含线程集、加载的模块以及进程正在使用的内存量等性能信息。
Process类实现IDisposable接口。在使用完类型后,应直接或间接释放类型。若要直接释放类型,请在try/finally 块中调用其Dispose方法。若要间接释放类型,请使用using或using等语言构造。
Process类的常用属性和方法简介
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 类的常用属性和方法简介
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); } }