First analysis is much slower on Windows after a reboot (because of Windows Defender scanning files as they're read) #56755
Labels
area-analyzer
Use area-analyzer for Dart analyzer issues, including the analysis server and code completion.
There have been a few issues about the first analysis on Windows being really slow. Some have noted it's only the first time after a reboot, for example:
When it came up again recently I spent some time trying to reproduce it (I had in the past, but was failing recently) and discovered that in my Windows Defender settings, I had exclusions for:
.dartServer
folderWhen I removed those exclusions, I was able to reproduce 30+ seconds of initial analysis after a reboot (both via IDEs and
dart analyze
), with analysis being just a few seconds subsequently. It appears that the first read of a file is significantly slower due to scanning by Windows Defender and because the analysis server reads a lot of files (from.dartServer\.analysis-driver
) synchronously (and sequentially), this has a big impact on the initial analysis time (after a reboot).I was able to reproduce the same behaviour from a standalone script that just tries to read the same files that the analyzer ends up reading at startup:
Results look like:
Dart generally discourages async IO but I was curious what the difference would be if we were able to trigger the reads all up-front simultaneously, so I wrote an equivalent script that uses async IO (and triggered
readBytes
all at the same time - although this is something that the analyzer is unlikely to be able to do):The results are (perhaps unsurprisingly) much better that way:
Since changing sync->async isn't always easy, I also measured opening/closing all files asynchronously in advance of reading them all synchronously to see how that worked (this results in duplicate work but avoids changing the real "implementation" from sync):
The results looked like:
Given how the filenames are computed, I'm not sure if it's feasible to change anything in the analyzer to improve this, nor am I sure how worthwhile trying to solve this is (probably most Windows users are affected to some degree, but only the first time they open their projects after a reboot and the impact might depend on the specs of their machine and size of their workspace). I thought it was worth capturing this here though in case others have ideas, or at least as a summary that can be referenced by other issues that might be related.
(@bwilkerson @scheglov FYI)
The text was updated successfully, but these errors were encountered: