Windows Mobile 6.5构建时间(VS2008)

5
我有一个小的Windows Mobile应用程序,大约有25个表单和50个类,分为3个项目。当我在调试模式下构建项目时,需要花费25到40分钟
我尝试了跳过平台验证的方法,但似乎没有帮助。
开发环境是VS 2008,Windows Mobile 6.5.3,Compact Framework 2.0。
<ProductVersion>9.0.30729</ProductVersion>
<OSVersion>5.02</OSVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<NativePlatformName>Windows Mobile 6.5.3 Professional DTK</NativePlatformName>

计算机型号是HP EliteBook 8440p,搭载i3 @2.4Ghz处理器和4GB内存。
可用内存充足(已使用2.2GB)。
编译时CPU使用率约为25%。
在编译时,Visual Studio及其所有子窗口95%的时间都会变成空白。
事件查看器没有显示出任何特别警告,如硬盘故障等。 更新1 在进程监视器跟踪中,我可以看到在编译过程中devenv.exe存在定期的网络活动。版本控制系统(VSS)是否与构建有关? (我通过VPN隧道访问VSS存储库,今天已将其设为旁路模式。)

你尝试过禁用你的反病毒软件吗?我们成功地通过禁用特定文件夹中解决方案所在位置的反病毒软件来提高了构建速度。但我们的问题从来没有像你们这样严重! - Christoffer Lette
这肯定是环境问题。我从来没有见过它需要这么长的时间。你尝试使用另一台电脑看看是否有任何变化了吗? - ctacke
这是一台客户电脑,我需要使用它。防病毒软件是Forefront,由于被锁定,我无法禁用构建文件夹。但是,我可以通过进程资源管理器验证它不会以任何方式峰值,它的CPU使用率保持在0.1%。 - Carl R
在您的配置管理器下,您也在编译安装程序项目吗?如果是笔记本电脑,您可以将其配置为以100%的功率运行吗? - user153923
当前配置中跳过了(四个)安装程序。这是一台笔记本电脑,连接了外部电源。还有大量的处理能力剩余,在构建期间运行进程监视器和其他工具不会有任何影响。 - Carl R
1个回答

2
首先是好消息:您可以缩短长时间的构建时间,接下来是“坏消息”,需要做以下工作:
  1. 尝试使用MSBuild进行构建,以避免VS2008中断或冻结构建
  2. 尝试找出为什么构建速度慢,您可以在构建时观察日志。
  3. 记录特别缓慢的部分
  4. 通过加速最慢的项目来解决“长时间构建问题”。只要您想获得更好的性能或没有更多需要加速的项目为止。

构建期间常见的问题:

  1. Com引用如果没有单独构建(TLBIMP.exe),可能会减慢构建速度
    尝试首先构建Interop库,然后在需要使用它们的地方使用它们
  2. Post/PreBuild事件可能会执行一些有用但缓慢的操作...清理并尽可能删除它们
    在项目的BuildEvents属性中使用Run when build updates the project output,仅在构建更改二进制文件时调用PostBuild事件。
  3. 解决方案文件中的引用会停止MSBUILD构建,因此您应该将其修复为在项目文件中
  4. 尝试直接/一次部署每个项目构建后部署比构建解决方案后部署更慢,制作一个“dist.bat”首先构建,然后部署。

您可以使用Visual Studio宏开始当前打开的解决方案的MSBUILD:

Public Module Builder

    Sub BuildSolutionDebug()
        SaveAll()
        Run("", "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe", """" & GetSolutionName() & """ /t:ReBuild /p:Configuration=Debug /p:Platform=""Mixed Platforms""")
    End Sub

    Sub Run(ByVal folder As String, ByVal file As String, ByVal arguments As String)
        Dim process As New System.Diagnostics.Process()
        process.Start(System.IO.Path.Combine(folder, file), arguments)
        Try
            process.WaitForExit()
        Catch ex As Exception

        End Try

    End Sub

    Sub SaveAll()
        DTE.ExecuteCommand("File.SaveAll")
    End Sub

    Function GetSolutionName() As String
        Return DTE.Solution.FullName
    End Function

End Module

如果您有任何疑问或想讨论某个问题,请与我联系。我很乐意帮助您。
我也很乐意阅读您对问题的解决方案,以及在哪个环节您的构建速度变慢了!


MSBuild可以从命令行部署吗?还是您使用其他工具进行部署? - Carl R
  1. Interops 可以在一个独立的项目中创建,并可从所有其他项目中进行引用。
- oberfreak
  1. Interop必须与您想要使用它的DLL文件夹在同一个文件夹中,因此您应该将其复制到所需的文件夹中。
- oberfreak
  1. Interop与以前相同,只需创建一次并将其复制到目标位置即可。
- oberfreak
  1. 就我所看到的,您不需要更改您的设置。
- oberfreak
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接