@@ -22,7 +22,6 @@ open Microsoft.CodeAnalysis.Completion
2222open Microsoft.CodeAnalysis .Options
2323open Microsoft.VisualStudio
2424open Microsoft.VisualStudio .Editor
25- open Microsoft.VisualStudio .Text
2625open Microsoft.VisualStudio .TextManager .Interop
2726open Microsoft.VisualStudio .LanguageServices .Implementation .LanguageService
2827open Microsoft.VisualStudio .LanguageServices .Implementation .ProjectSystem
@@ -46,7 +45,12 @@ type internal FSharpCheckerProvider
4645
4746 let checker =
4847 lazy
49- let checker = FSharpChecker.Create( projectCacheSize = 200 , keepAllBackgroundResolutions = false (* , MaxMemory = 2300 *) , legacyReferenceResolver= Microsoft.FSharp.Compiler.MSBuildReferenceResolver.Resolver)
48+ let checker =
49+ FSharpChecker.Create(
50+ projectCacheSize = Settings.LanguageServicePerformance.ProjectCheckCacheSize,
51+ keepAllBackgroundResolutions = false ,
52+ (* , MaxMemory = 2300 *)
53+ legacyReferenceResolver= Microsoft.FSharp.Compiler.MSBuildReferenceResolver.Resolver)
5054
5155 // This is one half of the bridge between the F# background builder and the Roslyn analysis engine.
5256 // When the F# background builder refreshes the background semantic build context for a file,
@@ -126,18 +130,18 @@ type internal ProjectInfoManager
126130 // compiled and #r will refer to files on disk
127131 let referencedProjectFileNames = [| |]
128132 let site = ProjectSitesAndFiles.CreateProjectSiteForScript( fileName, referencedProjectFileNames, options)
129- return ProjectSitesAndFiles.GetProjectOptionsForProjectSite( tryGetOptionsForReferencedProject, site, fileName, options.ExtraProjectInfo, serviceProvider, true )
133+ return ProjectSitesAndFiles.GetProjectOptionsForProjectSite( Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences , tryGetOptionsForReferencedProject, site, fileName, options.ExtraProjectInfo, serviceProvider, true )
130134 else
131135 let site = ProjectSitesAndFiles.ProjectSiteOfSingleFile( fileName)
132- return ProjectSitesAndFiles.GetProjectOptionsForProjectSite( tryGetOptionsForReferencedProject, site, fileName, extraProjectInfo, serviceProvider, true )
136+ return ProjectSitesAndFiles.GetProjectOptionsForProjectSite( Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences , tryGetOptionsForReferencedProject, site, fileName, extraProjectInfo, serviceProvider, true )
133137 }
134138
135139 /// Update the info for a project in the project table
136140 member this.UpdateProjectInfo ( tryGetOrCreateProjectId , projectId : ProjectId , site : IProjectSite , workspace : Workspace , userOpName ) =
137141 this.AddOrUpdateProject( projectId, ( fun isRefresh ->
138142 let extraProjectInfo = Some( box workspace)
139143 let tryGetOptionsForReferencedProject f = f |> tryGetOrCreateProjectId |> Option.bind this.TryGetOptionsForProject
140- let referencedProjects , options = ProjectSitesAndFiles.GetProjectOptionsForProjectSite( tryGetOptionsForReferencedProject, site, site.ProjectFileName(), extraProjectInfo, serviceProvider, true )
144+ let referencedProjects , options = ProjectSitesAndFiles.GetProjectOptionsForProjectSite( Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences , tryGetOptionsForReferencedProject, site, site.ProjectFileName(), extraProjectInfo, serviceProvider, true )
141145 let referencedProjectIds = referencedProjects |> Array.choose tryGetOrCreateProjectId
142146 checkerProvider.Checker.InvalidateConfiguration( options, startBackgroundCompileIfAlreadySeen = not isRefresh, userOpName= userOpName + " .UpdateProjectInfo" )
143147 referencedProjectIds, options))
231235 [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.IntelliSenseOptionPage>, " F#" , null , " IntelliSense" , " 6008" ) >]
232236 [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.QuickInfoOptionPage>, " F#" , null , " QuickInfo" , " 6009" ) >]
233237 [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.CodeFixesOptionPage>, " F#" , null , " Code Fixes" , " 6010" ) >]
238+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.LanguageServicePerformanceOptionPage>, " F#" , null , " Performance" , " 6011" ) >]
234239 [<ProvideLanguageService( languageService = typeof< FSharpLanguageService>,
235240 strLanguageName = FSharpConstants.FSharpLanguageName,
236241 languageResourceID = 100 ,
0 commit comments