Monitor System.Reflection.Assembly动态加载dll

时间:2014-04-06 06:10:19

标签: .net vb.net dll reflection monitor

我不确定如何标题这个问题所以如果您认为标题可以改进,请随时编辑。

所以,我通常不会在vb.net中编码,但这次作为学校作业,我需要这样做。 它是关于使用System.Reflection.Assembly调用一组6个dll。我已经设法使用以下代码:

For Each dll As String In loadedDLLs
            Dim newAssembly As System.Reflection.Assembly =
                    System.Reflection.Assembly.LoadFrom(dll)
            For Each dat As System.Type In newAssembly.GetExportedTypes
                Dim x As Object = Activator.CreateInstance(dat)
                Dim args() As [Object] = {}
                dat.InvokeMember("init", System.Reflection.BindingFlags.InvokeMethod, Nothing, x, args)
            Next
        Next

在上面的代码中,dll是来自dll文件的路径,我在OpenFileDialog

“加载”的每个dll上执行“init”方法

我需要做的是将它添加到DataGridView,并使用相关的系统使用标准更新每个Timer.Tick间隔的网格。现在我发现了一个非常有用的帖子,在代码的另一部分允许我监视.exe文件的执行,这里是链接:http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.privatememorysize64(v=vs.110).aspx

有谁能请我指点监控dll性能的方向?代码snipet或链接会很棒。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我会做以下事情,虽然可能有更好的方法:

创建一个简单的exe,它将dll的路径作为参数。

在你的监视应用程序中调用exe作为新进程(Diagnositc.Process)传递dll路径。

然后,您可以从流程对象中获取各种信息,例如内存使用情况。

我还会考虑记录过程的开始和结束时间来计算所花费的时间。

您可能遇到的主要问题是init方法可能在您读取内存使用量之前完成,因此可能会查看峰值内存使用情况属性。