现在的位置: 首页 > 综合 > 正文

HOW TO:获取执行代码所处环境信息(应用)

2013年10月11日 ⁄ 综合 ⁄ 共 8320字 ⁄ 字号 评论关闭

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

应用

    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

    Private Sub OnUILoad(ByVal sender As ObjectByVal 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

输出结果:

********************************************************************************
**  程序名称 :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
********************************************************************************

抱歉!评论已关闭.