Currently we are trying to use the Visual Studio Git extension on a very large repository (2 years worth of history and around 28000 files).
Unfortunately it seems that the extension updates it's status information by rescanning the entire repository every time a file watcher notices a change. This is very inefficient and it causes the IDE to lock up whenever a file is opened in the repository (as it does a full rescan before the IDE responds again).
A better approach would be to use the file watchers to perform delta updates on the known status of the repository (so if a file watcher notices a change on one file, it only rescans the status on that one file). When the user actively interacts with the commit window, and no rescan has been performed within a period of time, then and only then should the IDE do a full rescan of the repository to update the status. In particular, when staging and unstaging files, it should only rescan the relevant files and not do a full rescan.
It should be noted that other Git tools such as Git Extensions do not suffer from the same performance issues, so this is something that can be fixed.