Ionide-vscode-fsharp: Project loading is sequential and it take ages.

Created on 24 Jun 2019  路  14Comments  路  Source: ionide/ionide-vscode-fsharp

Is your feature request related to a problem? Please describe.

Trying to open big solution (~160 projects) with Ionide 4.0.0
Projects are loading one-by-one (even if they are independent from each other) and it takes ages to finish.

Describe the solution you'd like
They should load in parallel. Even if some work could be done twice, it's worth doing.

Describe alternatives you've considered
Rider does "synchronization project" initialization in 2 minutes with going extreme load with SSD and CPU.

enhancement performance project loading

All 14 comments

Hey @Szer :wave:,

Thank you for opening an issue. We will get back to you as
soon as we can. Also, check out our OpenCollective and consider
backing us.

https://opencollective.com/ionide

PS.: We offer backer support for all backers. Don't forget to add backer label when you start backing us :smile:

Problem for @Krzysztof-Cieslak is that then I'm complaining about CPU usage (and unusable system) when opening Fake.sln ;)

Changes in a project parsing strategy are planned for the future. @enricosada knows more about that

With 160 projects sounds like you have bigger issues to think about first :-)

@7sharp9 160 doesn't sound like a number a computer cannot handle either. I think it should work. Saying that's too much is not reasonable when Microsoft internally tests VS against such numbers and therefore all other editors can work with that number just fine.

when Microsoft internally tests VS against such numbers

If I get whole team working just on project system it will be reasonable to expect Ionide supporting such amounts without any problem ;-)

Yes, there are various enhancement we can do to reach that goal eventually.
For sure i think we can incrementally improve, one step at time, i hope to do so.

Honestly I unironically hope we don't support 160 projects in a single solution. The cognitive load of that sounds bad. Multiple solutions is not a crime. Supporting so many projects in a solution is in itself a footgun and leads to a scenario where I could theoretically work there. As a workaround you maybe could load projects individually, however I suspect they're all in one solution because they're spuriously interrelated. I've worked at a company with over 30 million lines of code, no code gen and even they didn't have so many projects under one solution.

image

And I already have a lots of tooling issues ;)
I don't feel any cognitive load to be honest. In fact it's a lot easier to find stuff now than it was with "FakeLib" (imho)

TBF, I鈥檓 just not sure how well we can support such loads - not only in terms of just a project loading (improvements here will affect everyone, even smaller projects) but just in terms of FCS/FSAC/BackgroundService performance

I'm currently looking at a solution with millions of lines with half as many projects (around 25). It needs to be broken up into more than one solution.

@Krzysztof-Cieslak I don't see any reason why it wouldn't work. The issues I currently see are not mainly performance to be honest. Yes startup perf is an issue but even once everything is loaded I run into lots of issues I'm trying to figure out and report properly, but I don't see any high load after everything is loaded. This has drastically improved from 3 to 4

Problems are more like:

  • Everything suddenly stops working (intellisense, line lense, ...) after some hours <- I see this on small solutions as well
  • I think there is an issue with multi-targeting which I'm trying to figure out which breaks some stuff
  • Issues I have already reported on various locations
  • Sometimes FSAC seems to decide it needs to reload everything. I feel like this happens when you run a fake build, maybe all project files are touched and Ionide goes crasy about that (even if there are no actual changes). This obviously is much worse if you have lots of projects.

Back to this issue: I don't see anything we couldn't work out.

For the record I talked to @matthid on slack and better understand why his project is the way it is :). The moral of the story is don't comment if you haven't gotten a full night's rest.

Should be fixed with 5.0

The project loading is still sequential but should be way faster

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bruno-cadorette picture bruno-cadorette  路  4Comments

dustinmoris picture dustinmoris  路  3Comments

landy picture landy  路  5Comments

alfonsogarciacaro picture alfonsogarciacaro  路  5Comments

yuhr picture yuhr  路  3Comments