我对 TFS 有性能问题。这个问题似乎与版本无关,我在 TFS 2012 和 TFS 2010 中遇到过。
我正在为 TFS 开发权限管理工具。当用户选择团队项目集合和特定项目时,我发起查询以获取所有源代码管理项权限,并构建缓存。在开发过程中,我用小型本地项目进行了测试,我没有注意到任何性能问题,但是在稍微大一点的项目(5000 多个文件)中,查询变得非常慢。
我对此查询使用VersionControlServer.GetPermissions 方法。
我试图将其称为仅提供带有 的根项目RecursionType.Full
,但后来我没有收到所有项目权限,只有那些经过身份验证的用户具有明确权限的项目权限(我猜)。
因此,我调用了给出项目所有项目的方法,并将递归设置为RecursionType.None
. 以下是代码的重要行:
ItemSet projectItems = VersionControlServer
.GetItems(projectRootItem, RecursionType.Full);
IEnumerable<string> serverItems = projectItems.Items
.Select(i => i.ServerItem);
IEnumerable<ItemSecurity> itemSecurities = VersionControlServer
.GetPermissions(serverItems.ToArray(), RecursionType.None);
我希望最后一行对 TFS 进行一次调用,但是当我分析应用程序时,我看到 HTTP 请求数量不合理,对 7800 个文件的 11993 个请求,并且该方法运行了大约 2 分钟。
我花了很多时间试图找出这种行为的原因,但没有成功。我在TFS SDK中也找不到好的替代解决方案。
任何帮助将非常感激!