VB.NET SLOW编译时间 - 没有磁盘或CPU活动

时间:2009-08-12 14:15:24

标签: vb.net performance compiler-construction

我们有一个用VB.NET编写的客户端项目。在其中一个项目中,我们有大约100个模块,这些模块都非常简单。它们是在对象类型之间转换的扩展方法。这是一个小片段:

Public Module ScheduleExtensions

<System.Runtime.CompilerServices.Extension()> _
Public Function ToServicesData(ByVal source As Schedule) As ScheduleServicesData
    If (source IsNot Nothing) Then
        Dim target As New ScheduleServicesData
        With target
            .CenterId = source.CenterId
            .EmployeeGuid = source.EmployeeGuid
            .EndDateTime = source.EndDateTime

问题是,仅此项目需要2分钟以上才能构建。我运行了diskmon和filemon,它在构建似乎挂起时不访问文件系统。在大多数执行期间,CPU使用率也很低。大约2分钟后,构建完成并且存在磁盘和CPU活动。这个问题可以在任何机器上重现(到目前为止尝试了4台)。

我甚至使用vbc命令行编译项目,问题就在那里。

是否存在导致编译时间不足的VB.NET扩展方法?这是我们使用的唯一功能,比循环/获取/设置等更复杂。

2 个答案:

答案 0 :(得分:1)

显示没有显着CPU或DISK活动的性能问题总是与网络等待相关,无论是网络性能本身,还是更有可能等待其他系统上的服务响应。现在我没有在示例中看到任何应该出现此问题的内容,因此我必须假设问题来自项目,项目设置或VS环境或系统环境中的其他问题。

您可能会尝试使用一种工具来监控系统中的所有网络呼叫并查看正在进行的操作。

答案 1 :(得分:0)

很难知道这样的小样本会出现什么问题。编译器中的扩展方法支持没有任何内在的缓慢,我们在这方面有许多回归测试。如果存在错误,则可能是导致问题的几个因素的组合。

如果您有时间,请在

上提交有关此问题的错误

如果您可以提供一个可以重现问题的小样本,那么它可以更容易地调查错误。