Visual Studio 2013 + TFS = 慢

26

我正在使用最近重新安装的带有SSD的笔记本电脑。 我正在使用带有TFS的Visual Studio 2013。

我的问题是,当我启动和结束合并或比较时,需要等待大约20-25秒钟。 结束Web调试会话的等待时间也约为30秒。

我没有特殊的配置。 TFS服务器在我们的局域网中,我通过以太网连接。 我在TFS设置中没有配置代理。

我已经尝试了以下操作:

  • 删除了suo文件
  • 在Visual Studio 2013应用程序配置中添加了禁用代理的设置。
  • 本地存储符号
  • 重新添加映射
  • 重新添加工作区

对于不在TFS之外的项目,我没有这些问题。 我的同事们没有这个问题。


TFS的哪个版本?你的工作区配置是本地还是服务器?在离线工作时也很慢吗?你的工作区中有多少文件? - jessehouwing
我们正在使用 TFS 2013。工作区相当大(约有40k个文件,大小约为6.2gb)。我已经尝试了一个较小的工作区,但没有改善。 - Jacob de Boer
在安装SSD之前,它以前速度更快吗? - jessehouwing
1
嗯。像构建这样的事情速度快多了。似乎只有比较/合并和停止Web应用程序调试会出现问题。我之前也遇到过这些问题,没有SSD时也是如此,但当我重新安装VS后,问题就解决了。昨天我尝试进行比较。这需要25秒钟。我的同事在一个更老、更慢的笔记本电脑上执行相同的操作只需要1-2秒钟。我觉得这可能与网络超时有关。但我将启用VS和TFS,也许我可以找到原因。 - Jacob de Boer
3
我的直觉告诉我:检查IP路由和DNS设置。 - Giulio Vian
显示剩余2条评论
3个回答

54
有一些选项可供您选择,您尚未尝试过:
本地工作区与服务器工作区
当您拥有一个大的工作区(指工作区中有许多文件)或者当您的工作区包含许多二进制文件(例如NuGet包)时,如果将其配置为“本地工作区”,它可能会显著减慢速度。本地工作区在磁盘上保留原始文件(最新版本,就像TFS服务器知道的那样)的gzip文件。每当有很多文件更改时,它们都会与上次已知副本进行比较,并根据此进行签入或签出。
另一方面,服务器工作区只是查看文件的“只读”位。如果它具有一个,则TFS会认为它没有更改。如果它没有,则TFS会认为它已经被签出。
本地工作区有其优点,特别是如果您经常离线工作,但在上述情况下可能会导致严重的减速问题。
尝试将您的工作区配置为服务器工作区,以查看是否可以解决该问题。

enter image description here

Visual Studio默认创建本地工作区,自从引入此功能以来。
删除大型二进制文件并适当地限定工作区域
如果您要使用本地工作区,可能需要更新解决方案以确保不检入NuGet包、遮盖工作区中的大型二进制文件以及仅抓取实际需要的文件(例如为不同分支创建新的工作区)。
要遮盖文件,可以编辑工作区映射并添加一个不想获取的文件夹,并将操作从“活动”更改为“遮盖”,或者您可以直接从“源代码控制资源管理器”的上下文菜单中选择“高级”,然后选择“遮盖”进行遮盖。
尝试查找相应的NuGet包或自己创建它们,而不是检入您的二进制引用。大型二进制文件在版本控制系统中总是很麻烦,因为您永远无法合并它们,它们基本上只会占用空间。
缓存损坏
Team Explorer客户端在以下位置保留缓存:
C:\ Users {用户名} \ AppData \ Local \ Microsoft \ Team Foundation {版本} \ Cache

由于某些原因,可能导致其损坏。清除所有子文件夹和 VersionControl.config 可以是最后的手段,使其再次正常工作。

修复 Visual Studio 并关闭扩展

有时候 Visual Studio 本身会因为所有安装的热补丁、服务包和其他事物而感到困惑。更不用说所有可能影响其行为的扩展了。

一些扩展可以严重减缓与源代码控制的交互。例如上述的 Source Control Explorer Extensions 就有一个选项可以更改磁盘上文件的日期,这可能会导致 "Get" 操作在最后几秒钟停滞。

关闭此类扩展以查看是否仍然存在该行为始终是您应该执行的操作。修复 Visual Studio 并重新应用最新的更新包也可能解决此类问题。

可疑的扩展包括:

  • 扩展调试器
  • 扩展团队资源管理器
  • 扩展源代码控制资源管理器

关闭 Windows 代理自动检测

我看到了一些奇怪的行为,不是在所有网络上,也不是在所有代理服务器上,当Windows Proxy自动检测打开时。代理检测可能会导致长时间等待,因为它试图找出要连接的代理。
如果您依赖代理,请尝试禁用代理脚本和自动检测,并尝试直接在经典代理配置屏幕中设置代理。

enter image description here

尝试通过较困难的方式找到问题

按照此处所述的方法启用客户端跟踪。在devenv.exe.config中包含以下片段。它将把发生在TFS周围的所有内容转储到日志文件中。定位问题可能会很麻烦,但它将为您提供大量信息:

<system.diagnostics>
  <switches>
    <add name="TeamFoundationSoapProxy" value="4" />
    <add name="VersionControl" value="4" />
  </switches>
  <trace autoflush="true" indentsize="3">
    <listeners>
      <add name="myListener" type="Microsoft.TeamFoundation.TeamFoundationTextWriterTraceListener,Microsoft.TeamFoundation.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" initializeData="c:\tf.log" />
      <add name="perfListener" type="Microsoft.TeamFoundation.Client.PerfTraceListener,Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </listeners>
  </trace>
</system.diagnostics>

您可以运行启用了 Activity Trace Logging 的 Visual Studio。如果有插件行为异常,通常会在 ActivityLog.xml 中记录信息。要启用此类跟踪,请从命令行使用 /log 选项启动 Visual Studio。日志将被存储在此处:

%AppData%\Microsoft\VisualStudio\12.0\ActivityLog.XML

在最糟糕的情况下,您可以将一个Visual Studio或者分析器(或者Intellitrace命令行工具)连接到Visual Studio,并收集发生在Visual Studio内部的所有日志。
另外,您可以尝试使用Process Explorer监控系统,以查看IO或网络访问是否影响了性能。

1
谢谢您的帮助。我尝试缩小我的工作区,清除缓存并尝试转换到服务器工作区。这没有帮助。现在我将尝试修复并禁用扩展。 - Jacob de Boer
记录日志总是需要时间...仍在等待您的结果 :) - Kamarey
2
我在使用TFS时遇到了极度缓慢的问题。例如:展开文件夹或分支需要20-30秒的时间。切换到服务器工作区后速度变得非常快。 - Joels Elf
1
你是救星。我已经苦苦挣扎了几个月的TFS性能问题。我一定是中了"升级到本地工作区"的陷阱。谢谢你! - GCD
非常全面的回答,谢谢Jesse。我已经恢复到服务器工作区,但我不喜欢本地工作区解决方案如此缓慢。我已经联系了产品团队。 - Etienne
显示剩余2条评论

1

我曾经遇到过一个类似的问题,与Win10 64位、VS2015-TFS等有关。我通过将笔记本电脑的电源计划从“节能”改为“高性能”来解决它...


-2

Visual Studio还将Git直接集成在IDE中。如果您想要的话,您可以关闭IDE中的TFS集成,并使用 tf.exe 从命令行执行所有操作。 - jessehouwing

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