-
Notifications
You must be signed in to change notification settings - Fork 1.7k
First analysis is much slower on Windows after a reboot (because of Windows Defender scanning files as they're read) #56755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I'm not much of a Windows user, but outside of any changes to the analyzer, does the default configuration of Windows 11 Dev Drives make any difference here? If so, should we be suggesting new devs install Dart/Flutter and store their projects in one? |
Good question! I haven't tried using a Dev Drive yet.. when it was announced I couldn't find any details on what the security trade-offs were, but it seems there's more info now. It seems that the scanning may be asynchronous which certainly sounds like it would avoid these delays. I guess I should set one up and do some testing - thanks for the reminder about this :-) |
It made a huge difference. In my simple repro it's not quite as fast as the async version (it was 2s), but I tried the real world example too, and the initial analysis is down from ~30s to about 2-3s. It might be a reasonable recommendation, although it comes with the security caveats you link. Unfortunately I don't know how easy it would be for people to move to.. A few things I noted while setting it up:
I also don't know if there is anything that can go wrong using it, but I'll try to sort out my size/space issues and move over to it fully to see if anything comes up. |
Thanks so much for the Tests Dan! |
I think we should at the very least document this and recommend people to exclude |
That sounds sensible to me - it's the easiest fix (requires no changes to analyzer or the user to mess around with partitions to create a dev drive). We could probably also include some info about dev drives for those users that do want to go that route (although it's not clear to me if @jwren also suggested that if we could detect this case, we could show an in-editor notification and link to where this is documented. For example maybe we could time the file access for initial analysis and if it's above some threshold (there's a big difference between 3s for 3000 files and 30s for 3000 files) show a prompt with a link to that documentation. We could make this a one-time prompt (or once-per-some-time-period) so it's not an annoyance if you're on a slow machine or using remote disks or something. |
I don't know whether we intended it to be used by users, but #42813 contains evidence that there's at least one user that has used it. And where there's one there's likely to be more. 🙂 But I don't know of any plans to remove the support, so I think it's fine to mention it. |
…w in diagnostic pages This can help track down when performance issues may be caused by slow disk access (such as that described in #56755 caused by Windows Defender scanning files as they are read). Change-Id: I4aee0d3aa12f3c6d52bd8e95470915eb1b920829 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/388006 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
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: