How to improve the performance of the first connect to TFS

How to improve the performance of the first connect to TFS

Rate This
  • Comments 4

When you create your first connection to TFS the local client downloads the metadata required to work with the TFS work items. By default it downloads the metadata for all team projects in a collection, including the ones that you don't have access to. Martin Woodward has a great blog post if you want to read more on the background info, however the way you enable it has been changed in TFS 2010.

In TFS 2010 we have introduced Team Project Collections, which introduced the need to be able to set this value per collection. So we moved the setting to the TFS registry in TFS 2010 and TFS 2012 instead of in the web.config. This post contains the script for updating this registry value. If you want more information on the TFS registry, see this blog post.

  1. Open notepad
  2. Add then the following lines of code to create the PowerShell script to add the update the settings
  3. The first choice is to load of the correct version of the Client assembly
    #TFS 2010 (10.0.0.0)
    [Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

    #TFS 2012 (11.0.0.0)
    [Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
  4. The second choice is whether you want to have the behavior on all the project collections (use the configuration hive), or only a specific collection (use the collection hive). Also make sure that you update the url of your TFS server and the name of the collection in case you use the collection hive.
    # Configuration
    $configServer = new-object Microsoft.TeamFoundation.Client.TfsConfigurationServer "http://localhost:8080/tfs/"
    $hive = $configServer.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationRegistry])

    # Collection
    $projectCollection = new-object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection "http://localhost:8080/tfs/DefaultCollection"
    $hive = $projectCollection.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationRegistry])
  5. Then add the following lines to enabling the filtering of the metadata cache 
    # Enable metadata filtering
    $hive.SetValue("/Service/WorkItemTracking/Settings/FilterMetadata", "True")
    $hive.SetValue("/Service/WorkItemTracking/Settings/ExcludedAgents", "WebAccess:witadmin")
  6. Save the script as FilterMetadata.ps1
  7. Open the Command Prompt and run the following command (make sure you update the path of the file)
    powershell -ExecutionPolicy unrestricted -Command "& 'FilterMetadata.ps1'"

You can also download a copy of the script that uses

  • The TFS 2012 Client OM
  • The localhost
  • The configuration hive
Leave a Comment
  • Please add 5 and 2 and type the answer here:
  • Post
  • How do we improve the performance of copying each and every item in a solution with 15000+ individual files (1 million+ lines of source + all of the supporting files).

  • Tom,

    I don't understand your question. Why are you copying each item in a solution?

    Ewald

  • I try this solution, but my Visual Studio 2010 really slow on the first time hit TFS 2010!

    It's very fast on the second and later hit (I use local high speed network). I stop using tfs for about 2 mins and it's slow again.

    When I use Visual Studio 2010 in TFS server it's always fast. :(

  • How do we improve the performance of copying each and every item in a solution with 15000+ individual files (1 million+ lines of source + all of the supporting files).

Page 1 of 1 (4 items)