【问题标题】:Windows Mobile 6.5 build time (VS2008)Windows Mobile 6.5 构建时间 (VS2008)
【发布时间】:2011-11-16 10:09:38
【问题描述】:

我有一个小型的 Windows 移动应用程序,其中包含大约 25 个表单和可能分为 3 个项目的 50 个类。 当我构建项目时,在调试模式下正常的 CTRL-SHIFT-B 需要 25 到 40 分钟

我尝试了skip platform verification hack,但似乎没有帮助。

环境是VS 2008
Windows Mobile 6.5.3
紧凑型框架 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 内存。
有大量可用的 RAM(使用 2,2 Gb)。
编译期间 CPU 使用率约为 25%。

当我构建时,Visual Studio 及其所有子窗口在 95% 的时间里都是空白的。

事件查看器不会显示任何特定警告,例如硬盘损坏等。

更新 1

在进程监视器跟踪中,我可以看到在构建过程中 devenv.exe 中有定期的网络活动。 VSS 是否与构建有关? (我通过今天在旁路模式下的 vpn 隧道到达 vss 存储库。)

【问题讨论】:

  • 您是否尝试禁用您的防病毒软件?我们通过为解决方案所在的特定文件夹禁用防病毒软件,成功提高了构建速度。但是我们的问题从来没有像你们那么严重!
  • 这当然是环保的。我从来没有见过它需要这么长时间。您是否尝试过使用另一台 PC 来查看是否有任何变化?
  • 这是一台客户电脑,我需要使用它。防病毒软件是 Forefront,我无法禁用构建文件夹,因为它已被锁定。但是我可以从 Process Explorer 验证它不会以任何方式出现峰值,它的 CPU 使用率为 0.1%。
  • 在您的配置管理器下,您是否也在编译安装项目?如果是笔记本电脑,能不能把它配置成 100% 运行?
  • 当前配置中跳过了(四个)设置项目。这是一台笔记本电脑,它连接到外部电源。剩下的处理能力很多,在构建过程中运行进程监视器和其他东西根本不会影响。

标签: c# visual-studio visual-studio-2008 msbuild windows-mobile


【解决方案1】:

首先是好消息:您可以缩短较长的构建时间,
我们先来看看“坏消息”,这项工作:

  1. 尝试使用 MSBuild 构建它,以避免 VS2008 中断或冻结构建
  2. 尝试找出构建缓慢的原因,您可以在构建时观察日志。
  3. 写下特别慢的部分
  4. 尝试通过首先加速最慢的项目来解决“构建时间较长的问题”。只要您希望获得更好的性能,或者直到没有更多项目需要加速,就可以这样做。

构建过程中的常见问题:

  1. Com References 如果不单独构建 (TLBIMP.exe)
    可能会减慢您的构建速度 尝试先构建互操作库,然后随意使用它们
  2. Post/PreBuild 事件可以做一些有用但缓慢的事情...尽可能清理并删除它们
    在项目的 BuildEvents 属性中使用 Run when build updates the project output 仅调用 PostBuild 事件如果 Build 更改了二进制文件。
  3. Soultion 文件中的引用停止您的 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 可以从命令行部署,还是用别的东西来部署?
  • 其中一个项目中有一个 COM 引用,我应该将它包含在一个单独的项目中,然后将互操作文件包含在实际项目中,或者您将如何处理该 com 引用?引用互操作文件会导致需要更改设置项目吗?
  • 1. Interops 可以在单独的项目中创建并从所有其他项目中引用
  • 2. Interop 必须位于包含您要使用它的 DLL 的文件夹中,因此您应该将其复制到所需的文件夹中
  • 3.互操作与之前相同,您只需创建一次并将其复制到其目的地
猜你喜欢
  • 2012-04-30
  • 2012-07-29
  • 2018-05-05
  • 1970-01-01
  • 2014-11-21
  • 2017-01-28
  • 2012-05-20
  • 2017-12-18
  • 2012-06-25
相关资源
最近更新 更多