Author:水如烟
HOW TO:获取执行代码所处环境信息(小结)
现在做一个方法运行耗时测试类
Imports
System.ComponentModel
Namespace uReflection
Public Class CurrentMethodInfo
Private gMethodInformation As currentMethodInformation
Public Sub Input ( ByVal methodbase As System.Reflection.MethodBase)
gMethodInformation = New currentMethodInformation(methodbase)
End Sub
Public Sub Input ( ByVal stackframe As System.Diagnostics.StackFrame)
gMethodInformation = New currentMethodInformation(stackframe)
End Sub
' 下以为测试方法耗时用
Private gStopwatch As System.Diagnostics.Stopwatch
Private gIsCheck As Boolean
Private gUsetime As String
Public Property CheckRuntime() As Boolean
Get
Return gIsCheck
End Get
Set ( ByVal value As Boolean )
If value <> gIsCheck Then
If value Then
gStopwatch = New System.Diagnostics.Stopwatch
End If
gIsCheck = value
End If
End Set
End Property
Public Sub Start()
If CheckRuntime Then gStopwatch.Start()
End Sub
Public Sub [ Stop ]()
If CheckRuntime Then
gStopwatch.Stop()
gUsetime = gStopwatch.Elapsed.ToString
gStopwatch.Reset()
End If
End Sub
Public Overrides Function ToString() As String
Dim b As New System.Text.StringBuilder
b.Append(appInformation.ToString)
b.Append(gMethodInformation.ToString)
If CheckRuntime Then
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 测试用时 :{0} " , Me .gUsetime)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 测试时间 :{0} " , Now.ToString)
b.Append(System.Environment.NewLine)
End If
b.Append( New String ( " * " c, 80 ))
Return b.ToString
End Function
Private Class currentMethodInformation
Private gMethodbase As System.Reflection.MethodBase
Sub New ( ByVal methodbase As System.Reflection.MethodBase)
gMethodbase = methodbase
End Sub
Sub New ( ByVal stackFrame As System.Diagnostics.StackFrame)
gMethodbase = stackFrame.GetMethod
End Sub
< Description( " 程序集名称 " ) > _
Public ReadOnly Property AssemblyName() As String
Get
Return gMethodbase.DeclaringType.Assembly.GetName.Name
End Get
End Property
< Description( " 程序集版本 " ) > _
Public ReadOnly Property AssemblyVersion() As String
Get
Return gMethodbase.DeclaringType.Assembly.GetName.Version.ToString
End Get
End Property
< Description( " 类名 " ) > _
Public ReadOnly Property TypeName () As String
Get
Return gMethodbase.DeclaringType.FullName
End Get
End Property
< Description( " 方法名 " ) > _
Public ReadOnly Property Name() As String
Get
Return gMethodbase.ToString
End Get
End Property
Public Overloads Function ToString() As String
Dim b As New System.Text.StringBuilder
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序集名称 :{0} " , Me .AssemblyName)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序集版本 :{0} " , Me .AssemblyVersion)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 类名 :{0} " , Me .TypeName)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 方法名 :{0} " , Me .Name)
b.Append(System.Environment.NewLine)
Return b.ToString
End Function
End Class
Private Class appInformation
< Description( " 程序名称 " ) > _
Public ReadOnly Property Name() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ApplicationName
End Get
End Property
< Description( " 程序目录 " ) > _
Public ReadOnly Property Path() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
End Get
End Property
< Description( " 配置文件 " ) > _
Public ReadOnly Property Config() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
End Get
End Property
< Description( " 程序入口 " ) > _
Public ReadOnly Property entryPoint() As String
Get
Return System.Reflection.Assembly.GetEntryAssembly.EntryPoint.ToString
End Get
End Property
Public Shared Shadows Function ToString() As String
Dim mInfo As New appInformation
Dim b As New System.Text.StringBuilder
b.Append( New String ( " * " c, 80 ))
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序名称 :{0} " , mInfo.Name)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序目录 :{0} " , mInfo.Path)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 配置文件 :{0} " , mInfo.Config)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序入口 :{0} " , mInfo.entryPoint)
b.Append(System.Environment.NewLine)
b.Append( New String ( " * " c, 80 ))
Return b.ToString
End Function
End Class
End Class
End Namespace
Namespace uReflection
Public Class CurrentMethodInfo
Private gMethodInformation As currentMethodInformation
Public Sub Input ( ByVal methodbase As System.Reflection.MethodBase)
gMethodInformation = New currentMethodInformation(methodbase)
End Sub
Public Sub Input ( ByVal stackframe As System.Diagnostics.StackFrame)
gMethodInformation = New currentMethodInformation(stackframe)
End Sub
' 下以为测试方法耗时用
Private gStopwatch As System.Diagnostics.Stopwatch
Private gIsCheck As Boolean
Private gUsetime As String
Public Property CheckRuntime() As Boolean
Get
Return gIsCheck
End Get
Set ( ByVal value As Boolean )
If value <> gIsCheck Then
If value Then
gStopwatch = New System.Diagnostics.Stopwatch
End If
gIsCheck = value
End If
End Set
End Property
Public Sub Start()
If CheckRuntime Then gStopwatch.Start()
End Sub
Public Sub [ Stop ]()
If CheckRuntime Then
gStopwatch.Stop()
gUsetime = gStopwatch.Elapsed.ToString
gStopwatch.Reset()
End If
End Sub
Public Overrides Function ToString() As String
Dim b As New System.Text.StringBuilder
b.Append(appInformation.ToString)
b.Append(gMethodInformation.ToString)
If CheckRuntime Then
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 测试用时 :{0} " , Me .gUsetime)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 测试时间 :{0} " , Now.ToString)
b.Append(System.Environment.NewLine)
End If
b.Append( New String ( " * " c, 80 ))
Return b.ToString
End Function
Private Class currentMethodInformation
Private gMethodbase As System.Reflection.MethodBase
Sub New ( ByVal methodbase As System.Reflection.MethodBase)
gMethodbase = methodbase
End Sub
Sub New ( ByVal stackFrame As System.Diagnostics.StackFrame)
gMethodbase = stackFrame.GetMethod
End Sub
< Description( " 程序集名称 " ) > _
Public ReadOnly Property AssemblyName() As String
Get
Return gMethodbase.DeclaringType.Assembly.GetName.Name
End Get
End Property
< Description( " 程序集版本 " ) > _
Public ReadOnly Property AssemblyVersion() As String
Get
Return gMethodbase.DeclaringType.Assembly.GetName.Version.ToString
End Get
End Property
< Description( " 类名 " ) > _
Public ReadOnly Property TypeName () As String
Get
Return gMethodbase.DeclaringType.FullName
End Get
End Property
< Description( " 方法名 " ) > _
Public ReadOnly Property Name() As String
Get
Return gMethodbase.ToString
End Get
End Property
Public Overloads Function ToString() As String
Dim b As New System.Text.StringBuilder
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序集名称 :{0} " , Me .AssemblyName)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序集版本 :{0} " , Me .AssemblyVersion)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 类名 :{0} " , Me .TypeName)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 方法名 :{0} " , Me .Name)
b.Append(System.Environment.NewLine)
Return b.ToString
End Function
End Class
Private Class appInformation
< Description( " 程序名称 " ) > _
Public ReadOnly Property Name() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ApplicationName
End Get
End Property
< Description( " 程序目录 " ) > _
Public ReadOnly Property Path() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
End Get
End Property
< Description( " 配置文件 " ) > _
Public ReadOnly Property Config() As String
Get
Return System.AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
End Get
End Property
< Description( " 程序入口 " ) > _
Public ReadOnly Property entryPoint() As String
Get
Return System.Reflection.Assembly.GetEntryAssembly.EntryPoint.ToString
End Get
End Property
Public Shared Shadows Function ToString() As String
Dim mInfo As New appInformation
Dim b As New System.Text.StringBuilder
b.Append( New String ( " * " c, 80 ))
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序名称 :{0} " , mInfo.Name)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序目录 :{0} " , mInfo.Path)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 配置文件 :{0} " , mInfo.Config)
b.Append(System.Environment.NewLine)
b.AppendFormat( " ** 程序入口 :{0} " , mInfo.entryPoint)
b.Append(System.Environment.NewLine)
b.Append( New String ( " * " c, 80 ))
Return b.ToString
End Function
End Class
End Class
End Namespace
应用
Dim
MethodTest
As
New
LzmTW.uReflection.CurrentMethodInfo
Public Sub Load( ByVal mainform As System.Windows.Forms.Form) Implements LzmTW.AddIns.Base.IPackage.Load
MethodTest.Input(System.Reflection.MethodBase.GetCurrentMethod)
MethodTest.CheckRuntime = True
MethodTest.Start()
gMainForm = CType (mainform, LzmTW.ApplicationBase.MainForm)
Initialize()
MethodTest.Stop()
Console.WriteLine(MethodTest.ToString)
Console.WriteLine()
End Sub
Public Sub Load( ByVal mainform As System.Windows.Forms.Form) Implements LzmTW.AddIns.Base.IPackage.Load
MethodTest.Input(System.Reflection.MethodBase.GetCurrentMethod)
MethodTest.CheckRuntime = True
MethodTest.Start()
gMainForm = CType (mainform, LzmTW.ApplicationBase.MainForm)
Initialize()
MethodTest.Stop()
Console.WriteLine(MethodTest.ToString)
Console.WriteLine()
End Sub
Private
Sub
OnUILoad(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs)
MethodTest.Input( New System.Diagnostics.StackFrame)
MethodTest.Start()
gMenuFactory.GetMenuItem(MENU_UNLOAD).Enabled = True
gMenuFactory.GetMenuItem(MENU_LOAD).Enabled = False
gUI.Initialize()
MethodTest.Stop()
Console.WriteLine(MethodTest.ToString)
Console.WriteLine()
End Sub
MethodTest.Input( New System.Diagnostics.StackFrame)
MethodTest.Start()
gMenuFactory.GetMenuItem(MENU_UNLOAD).Enabled = True
gMenuFactory.GetMenuItem(MENU_LOAD).Enabled = False
gUI.Initialize()
MethodTest.Stop()
Console.WriteLine(MethodTest.ToString)
Console.WriteLine()
End Sub
输出结果:
********************************************************************************
** 程序名称 :MyComputer.vshost.exe
** 程序目录 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug /
** 配置文件 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug / MyComputer.vshost.exe.config
** 程序入口 :Void Main(System.String[])
********************************************************************************
** 程序集名称 :ComputerAddIns
** 程序集版本 : 1.0 . 0.0
** 类名 :ComputerAddIns.wmiQueryApplication
** 方法名 :Void Load(System.Windows.Forms.Form)
** 测试用时 : 00 : 00 : 00.0488375
** 测试时间 : 2006 - 8 - 17 0 : 03 : 08
********************************************************************************
********************************************************************************
** 程序名称 :MyComputer.vshost.exe
** 程序目录 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug /
** 配置文件 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug / MyComputer.vshost.exe.config
** 程序入口 :Void Main(System.String[])
********************************************************************************
** 程序集名称 :ComputerAddIns
** 程序集版本 : 1.0 . 0.0
** 类名 :ComputerAddIns.wmiQueryApplication
** 方法名 :Void OnUILoad(System.Object, System.EventArgs)
** 测试用时 : 00 : 00 : 01.3316949
** 测试时间 : 2006 - 8 - 17 0 : 03 : 12
********************************************************************************
** 程序名称 :MyComputer.vshost.exe
** 程序目录 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug /
** 配置文件 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug / MyComputer.vshost.exe.config
** 程序入口 :Void Main(System.String[])
********************************************************************************
** 程序集名称 :ComputerAddIns
** 程序集版本 : 1.0 . 0.0
** 类名 :ComputerAddIns.wmiQueryApplication
** 方法名 :Void Load(System.Windows.Forms.Form)
** 测试用时 : 00 : 00 : 00.0488375
** 测试时间 : 2006 - 8 - 17 0 : 03 : 08
********************************************************************************
********************************************************************************
** 程序名称 :MyComputer.vshost.exe
** 程序目录 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug /
** 配置文件 :G: / Documents and Settings / LzmTW / My Documents / Visual Studio 2005 / Projects / MyComputer / MyComputer / bin / Debug / MyComputer.vshost.exe.config
** 程序入口 :Void Main(System.String[])
********************************************************************************
** 程序集名称 :ComputerAddIns
** 程序集版本 : 1.0 . 0.0
** 类名 :ComputerAddIns.wmiQueryApplication
** 方法名 :Void OnUILoad(System.Object, System.EventArgs)
** 测试用时 : 00 : 00 : 01.3316949
** 测试时间 : 2006 - 8 - 17 0 : 03 : 12
********************************************************************************