gpt4 book ai didi

c# - TFS 对象模型 : Do WorkItems keep sessions open?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:13 25 4
gpt4 key购买 nike

我们目前正在调查一个问题,根据防火墙提供商的说法,我们有时会打开大约 1500 个并行 session 。我强烈怀疑我们的 TFS-Replication 服务(通过 TFS 对象模型从外部 TFS 获取工作项并将一些数据保存到本地 SQL 数据库中)导致了问题。

对象模型的访问是这样的:

        internal static async Task<IReadOnlyCollection<WorkItem>> QueryWorkItemsAsync(string wiqlQuery)
{
var tfsConfig = TFSConfiguration.Instances[Constants.TfsPrefix.External];
var uri = new Uri(tfsConfig.WebbaseUri);
var teamProject = new TfsTeamProjectCollection(uri, new VssBasicCredential(string.Empty, ConfigurationManager.AppSettings[Infrastructure.Constants.APP_SETTINGS_TFS_PAT]));
var workItemStore = teamProject.GetService<WorkItemStore>();

var query = new Query(workItemStore, wiqlQuery, null, false);

var result = await Task.Run(
() =>
{
var castedWorkItems = query.RunQuery().Cast<WorkItem>();
return castedWorkItems.ToList();
});

return result;
}

没什么特别的:可以将 WIQL 传递到方法中。目前,我正在获取 block ,所以 WIQL 看起来像

            var wiql = "SELECT * FROM WorkItems";
wiql += $" WHERE [System.Id] > {minWorkItemId}";
wiql += $" AND [System.Id] <= {maxWorkItemId}";
wiql += " ORDER BY [System.Id] DESC";

除了映射它们的某些字段外,我几乎没有对这个 WorkItems 做任何事情,但没有写入、保存或任何其他操作。我没有得到关于我正在使用的关于开放 session 的对象的任何提示,而且 WorkItem-Objects 本身在内存中的生命周期非常短。

我是否遗漏了一些可以解释该服务中的开放 session 的内容?

最佳答案

客户端对象模型做了很多事情:

  • 它为每个用户/项目集合组合保留一个连接池以加速数据传输。
  • 您点击的每个工作项修订都需要获取。
  • 从查询具体化的每个工作项仅包含在查询中选择的字段,访问的其他字段是按需获取的。

TFSTeamprojectCollection 类实现了 IDisposable,必须不时清理以确保关闭连接。保留内部缓存,但它确保连接关闭。

将此代码包装在 try/catch block 中或通过依赖注入(inject)提供团队项目集合并在更高级别管理连接可能是个好主意(否则您的其他字段将无法填充)。

关于c# - TFS 对象模型 : Do WorkItems keep sessions open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48306723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com