diff options
author | therzok <marius.ungureanu@xamarin.com> | 2019-06-18 11:04:48 +0300 |
---|---|---|
committer | therzok <marius.ungureanu@xamarin.com> | 2019-06-20 05:09:11 +0300 |
commit | 41c499a99946a920ecdb6c0abc28df5bbf17a7b0 (patch) | |
tree | d15aa4428e03fb00e1961df735c85cf08c4799fe /main | |
parent | 7a2bffb6653880bbe97eea1279cec2dd6e2156c9 (diff) |
Some more perf optimizations here
```
Source MonoDevelop.Core.AsyncEvents
00:02:34.7219796 - MonoDevelop.Projects.Project Void OnFileCreated(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:01.5497746 - MonoDevelop.Projects.Project Void OnFileDeleted(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0229513 - MonoDevelop.Projects.Project Void OnFileRenamed(System.Object, MonoDevelop.Core.FileCopyEventArgs)
Source MonoDevelop.Core.EventQueue
00:02:10.0724091 - MonoDevelop.Projects.Project Void HandleFileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:18.8409343 - MonoDevelop.Ide.TypeSystem.MonoDevelopMetadataReference Void OnUpdatedOnDisk(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:15.7531517 - MonoDevelop.Projects.FileStatusTracker`1[MonoDevelop.Projects.SolutionItemEventArgs] Void HandleFileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:11.4172185 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ShowAllFilesBuilderExtension Void OnSystemFileAdded(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:10.6727282 - MonoDevelop.Ide.TypeSystem.TypeSystemService Void FileService_FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:02.6945364 - MonoDevelop.Unity.Project.NodeBuilders.UnityFileNodeBuilder Void OnFileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:01.6960784 - MonoDevelop.Projects.FileStatusTracker`1[MonoDevelop.Projects.WorkspaceItemEventArgs] Void HandleFileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:01.0363946 - MonoDevelop.PackageManagement.SdkProjectReloadMonitor Void FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.5363695 - MonoDevelop.PackageManagement.NuGetConfigFileChangedMonitor Void FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.4974428 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectNodeBuilder Void OnSystemFileCreated(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.4228951 - MonoDevelop.PackageManagement.NodeBuilders.ProjectPackagesProjectNodeBuilderExtension Void FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.4220673 - MonoDevelop.Ide.Gui.DocumentRegistry Void HandleFileServiceChange(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.4020246 - MonoDevelop.PackageManagement.Commands.PackageManagementStartupHandler Void FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.3517315 - MonoDevelop.Ide.TypeSystem.MonoDevelopAnalyzer Void OnUpdatedOnDisk(System.Object, System.EventArgs)
00:00:00.2972448 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ShowAllFilesBuilderExtension Void OnSystemFileDeleted(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.1205992 - MonoDevelop.Ide.RootWorkspace Void CheckFileRemoved(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0819609 - MonoDevelop.Projects.DotNetProject Void OnFileRemoved(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0697519 - MonoDevelop.Ide.Editor.EditorConfigService+ConventionsFileManager Void FileService_FileChanged(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0325364 - MonoDevelop.Unity.Project.NodeBuilders.UnityFileNodeBuilder Void OnFileCopied(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0199356 - MonoDevelop.Ide.DesktopService Void NotifyFileRemoved(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0117852 - MonoDevelop.Ide.Gui.Documents.DocumentManager Void CheckRemovedFile(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0025223 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectNodeBuilder Void OnSystemFileDeleted(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0024015 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ShowAllFilesBuilderExtension Void OnSystemFileRenamed(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0016862 - MonoDevelop.Ide.Editor.EditorConfigService+ConventionsFileManager Void FileService_FileRemoved(System.Object, MonoDevelop.Core.FileEventArgs)
00:00:00.0012199 - MonoDevelop.Ide.Gui.Pads.ProjectPad.ProjectFolder Void OnFileRenamed(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0010056 - MonoDevelop.Debugger.DebuggingService Void FileService_FileRenamed(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0009376 - MonoDevelop.Ide.Gui.Documents.DocumentManager Void CheckRenamedFile(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0006533 - MonoDevelop.Ide.Editor.EditorConfigService+ConventionsFileManager Void FileService_FileMoved(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0004185 - MonoDevelop.Ide.DesktopService Void NotifyFileRenamed(System.Object, MonoDevelop.Core.FileCopyEventArgs)
00:00:00.0003588 - MonoDevelop.Ide.RootWorkspace Void CheckFileRename(System.Object, MonoDevelop.Core.FileCopyEventArgs)
```
Diffstat (limited to 'main')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs | 45 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectReference.cs | 2 |
2 files changed, 35 insertions, 12 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs index cf85618ebe..d103fe3864 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs @@ -548,16 +548,28 @@ namespace MonoDevelop.Projects get { return LanguageBinding.SupportsPartialTypes; } } - void CheckReferenceChange (FilePath updatedFile) + void CheckReferenceChange (FileEventArgs updatedFiles) { - for (int n=0; n<References.Count; n++) { + int done = 0; + foreach (var item in updatedFiles) { + // HACK: Don't like this, but we need it for now. + if (!item.FileName.HasExtension ("dll")) + done++; + } + + for (int n=0; n<References.Count && done != updatedFiles.Count; n++) { ProjectReference pr = References [n]; if (pr.ReferenceType == ReferenceType.Assembly && DefaultConfiguration != null) { - if (pr.GetReferencedFileNames (DefaultConfiguration.Selector).Any (f => f == updatedFile)) { - SetFastBuildCheckDirty (); - pr.NotifyStatusChanged (); + foreach (var fileName in pr.GetReferencedFileNames (DefaultConfiguration.Selector)) { + if (Contains (updatedFiles, fileName)) { + done++; + SetFastBuildCheckDirty (); + pr.NotifyStatusChanged (); + break; + } } - } else if (pr.HintPath == updatedFile) { + } else if (Contains (updatedFiles, pr.HintPath)) { + done++; SetFastBuildCheckDirty (); var nr = pr.GetRefreshedReference (); if (nr != null) @@ -565,6 +577,19 @@ namespace MonoDevelop.Projects } } + static bool Contains (FileEventArgs args, FilePath fileName) + { + if (fileName.IsNullOrEmpty) + return false; + + foreach (var arg in args) { + if (arg.FileName == fileName) + return true; + } + + return false; + } + // If a referenced assembly changes, dirtify the project. /* if (DefaultConfiguration != null) { foreach (var asm in await GetReferencedAssemblies (DefaultConfiguration.Selector)) @@ -587,8 +612,7 @@ namespace MonoDevelop.Projects return; base.OnFileChanged (source, e); - foreach (FileEventInfo ei in e) - CheckReferenceChange (ei.FileName); + CheckReferenceChange (e); } @@ -1874,10 +1898,9 @@ namespace MonoDevelop.Projects /// </summary> public event EventHandler ReferencedAssembliesChanged; - private void OnFileRemoved (Object o, FileEventArgs e) + private void OnFileRemoved (object o, FileEventArgs e) { - foreach (FileEventInfo ei in e) - CheckReferenceChange (ei.FileName); + CheckReferenceChange (e); } protected async override Task OnExecute (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration, SolutionItemRunConfiguration runConfiguration) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectReference.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectReference.cs index a77dbf985b..4493d8c6f8 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectReference.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ProjectReference.cs @@ -625,7 +625,7 @@ namespace MonoDevelop.Projects if (s != null) return new string[] { s }; - return new string [0]; + return Array.Empty<string> (); } /* void AddRequiredPackages (List<string> result, SystemPackage fromPackage) |