Skip to main content

Visual studio 2019 + Resharper. Performance tweaks

Recently had to move from one pc to another and got a feeling that Visual studio got a bit slower on startup and project load.
In addition to that, the text became blurry, so I had to google what has changed recently and how to get back proper VS experience. 

Writing this post for myself to remember where to look at next time 😊

High resolution:

DPI problems on big screens are solved with a setting "optimize rendering for screens with different pixel densities. (Using build in search helps to find option without clicking here and there). 
As text suggested, right after restart everything got sharp again.

Visual studio settings:

The first improvements suggest I found was to disable options ‘reopen docs on solution load’ and ‘restore projects hierarchy’

The next set of options comes from preview features:

Autohide tool window and startup and ‘new git experience’ if you use git.

Resharper:

For those who use Resharper, jetbrains prepared a nice set of features you can enable to make vs faster, just change then to ‘fix silently’ and on each start, it will check and disable features.

Defender:

Exclude processes:
devenv.exe, msbuild.exe

Exclude resharper cache folder 
%LOCALAPPDATA%\JetBrains\Transient

Extra tip:

Force Visual Studio to perform garbage collection
"Ctrl+Shift+Alt+F12" + "Ctrl+Shift+Alt+F12"

Did it make my VS as fast as Visual studio Code? Nope. But I got back to what I used to have on a less powerful machine.

Links:
https://docs.microsoft.com/en-us/visualstudio/ide/visual-studio-performance-tips-and-tricks?view=vs-2019
https://www.jetbrains.com/help/resharper/Speeding_Up_ReSharper.html#resharper


Comments

Popular posts from this blog

Avoiding distributed transactions (DTC) with SQL Server and async code

Wrapping async code in transaction scope is not as straightforward as sync one. Let's say we have some simple code: await using (var connection = new SqlConnection(connectionString)) { await using var command = new SqlCommand("select 1", connection); await connection.OpenAsync(); await command.ExecuteScalarAsync(); } We can wrap it in transaction scope and test that it still works: using var ts = new TransactionScope(); await using (var connection = new SqlConnection(connectionString)) { await using var command = new SqlCommand("select 1", connection); await connection.OpenAsync(); await command.ExecuteScalarAsync(); } ts.Complete(); But if you try to run this code you will get: "A TransactionScope must be disposed on the same thread that it was created" exception.  The fix is easy: we need to add TransactionScopeAsyncFlowOption.Enabled option to the constructor: var options = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCom...

Accessing VM Host (localhost) from minikube

Time to time I need to access resources outside of your Kubernetes cluster. It can be some .net framework app that I can`t put in linux container or shared db, like SQL server. We can easily access resources in kube via kubefwd or ingress\exposed port. However, that doesn't work backwards. Services in k8s cluster can`t just access your machine, they need to know VM`s host IP. The main point here is finding an ip of the host machine: $ route -n | grep ^0.0.0.0 | awk "{ print \$2 }" 172.17.8.1 In order to run in from powershell we need to escape quotes: minikube ssh 'route -n | grep ^0.0.0.0 | awk \"{ print \$2 }\"' 172.17.8.1 What can it be use it for? I can setup that ip in PODS connection string but I don’t want to update every pod when my ip changes (a typical problem with hyberV). It would be much better to reference resources by dns name and let dns service decide how to resolve that resource. So let’s make a ‘dns-service’ that wil...

.NET Core code coverage - the simplest ever solution

Ever wanted to see test coverage of your solution? 0. add coverlet.collector nuget  to test project 1. Install reporting tool:  dotnet tool install -g dotnet-reportgenerator-globaltool  2. Run tests and store results in a temp folder (you don't want those result file trashing your solution folder): dotnet test --collect:"XPlat Code Coverage" -r $env:TEMP\CodeCoverage;  or if you want to exclude some files, just add runsettings.xml: dotnet test --settings runsettings.xml -r $env:TEMP\CodeCoverage;  3. Generate report: Test results will be stored in a folder with guid, so the tricky part here is to find the lastest created folder  reportgenerator -reports:((gci $env:TEMP\CodeCoverage | sort CreationTime -desc | select -f 1).FullName +"\coverage.cobertura.xml") -targetdir:$env:TEMP\CodeCoverResult -reporttypes:Html; 4. Open it: start $env:TEMP\CodeCoverResult\index.html Join all in one PowerShell file and enjoy one-click code coverage or use...