2

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 を 1 回呼び出していると予想していましたが、アプリケーションのプロファイルを作成したところ、HTTP 要求の数が不当であることがわかりました。7,800 個のファイルに対して 11,993 個の要求があり、メソッドは約 2 分間実行されていました。

私は、この動作の理由を見つけようとしてかなりの時間を費やしましたが、成功しませんでした。また、 TFS SDKで適切な代替ソリューションを見つけることができませんでした。

どんな助けでも大歓迎です!

4

1 に答える 1