考虑删除从持续集成构建中遗留下来的旧 TFS 工作区定义。
我们在大型 Team Foundation Server 项目树中遇到了同样的问题。有时,但并非总是如此,在 Visual Studio 2010 或 Visual Studio 2012 中打开解决方案会完全按照上述方式挂起。VS 2010 最脆弱;VS 2012 似乎不那么容易受到攻击,但它仍然会挂起。
通过监视 TFS Server 机器和底层 SQL Server 机器上的服务器活动,我们能够获得一些线索。某个查询存储过程在 SQL Server 中使用了过多的 CPU 时间。我们将此存储过程名称跟踪到一个 TFS 操作,该操作涉及扫描 TFS 工作区定义以查找其他用户的文件签出。
我们的 TFS 环境已经使用了 3 年多,我们一直在使用持续集成构建定义,使用开发人员工作站的“僵尸军队”作为 TFS 构建代理主机。我们还为主要版本创建新的 TFS 分支。每个分支包含大约 20 个具有自己构建定义的独立 Visual Studio 解决方案。
随着时间的推移,我们在每个开发人员工作站上积累了大约 2,000 个 TFS 工作区定义。我们一次有大约 10 个工作站,它们都有自己的定义。
使用 Visual Studio 命令窗口并以 TFS 管理员身份运行,我们使用此命令来识别由我们的“构建用户”创建的所有工作区:
tf 工作区 /collection:tfservername\collectionname /owner:ourbuilduser >c:\tf_ws_del.bat
然后,我们使用全局替换和 Notepad++ 编辑器宏记录器将每个结果行转换为以下形式:
tf 工作区 /delete /collection:tfservername\collectionname 工作区名;ourbuilduser <c:\yes.txt
其中 C:\yes.txt 包含单行“y”
我们还使用一些人工判断来删除以我们最近的 TFS 分支命名的工作区的删除行。
然后,我们在同一个 Visual Studio 命令窗口中运行该 c:\tfs_ws_del.bat 脚本并耐心等待它完成。
最终结果:我们的 Visual Studio 解决方案打开速度非常快。即使在源代码管理资源管理器中浏览文件夹层次结构也大大加快了速度。
警告:大量工作区的删除操作可能会大量扩展基础 SQL Server 上的 TempDB。与您的 DBA 协调以监控 SQL Server 机器上的空间。通过图形 TFS 管理员控制台工具停止和重新启动 TFS 集合有助于回收部分 TempDB 空间并将其返回到其内部“空闲块”列表。