Improve 'Refresh' performance for large repositories

Christopher Kline 7 years ago updated by Marc Strapetz 6 years ago 4

On large repositories, SmartGit performs sluggishly compared to command-line git when doing refresh operations. 

This makes the experience of working in SmartGit frustrating in large repos, because SmartGit performs refresh operations frequently (e.g. after pulls, after certain failed push operations, when the window comes to the foreground, etc).

As an example, we have a repo containing approximately 254,000 files. Here are the results comparing SmartGit ("17.1 preview 7 #11051, installed: #11019") versus Git for Windows ("2.12.2", 64-bit).

Initial refresh after startup ("cold cache" test):

  • SmartGit: 24 seconds
  • Command line: 2.5 seconds 

Subsequent refreshes of same repo:

  • SmartGit: 14 seconds
  • Command line: 1.5 seconds 

In these tests, SmartGit is consistently 9-10x slower than command-line git.

Perhaps this is because SmartGit is (last I checked with Syntevo) using the java-base jgit library for all read-only operations. 

Significant work has been put into command-line git over the past year (especially by Microsoft itself, which now uses git as their own internal source control on major products like Windows itself). 

It's a shame that SmartGit does not take advantage of these improvements to make the SmartGit experience as snappy as the command line one.


Performance is much improved in the latest 17.1 beta releases. Thanks for all the work you put in!

Satisfaction mark by Christopher Kline 6 years ago

I should note that the numbers above came from an 8-core 12GB VM running Windows 10 build 1607 with full hardware resources devoted to the VM. If necessary I can re-run the same tests on the host (a late-2016 MacBook Pro).

There are a couple of additional things happening during a Refresh, compared to a "git status". Either way, please send periodical thread dumps for a subsequent refresh to smartgit@syntevo.com : http://www.syntevo.com/doc/display/SG/Periodical+Thread+Dumps

Not a problem. I've gathered the requested data and emailed it to you as requested. Thanks for investigating!