Currently when package restore happens for the first time on a clean machine, it calls EnsurePackageFiles which takes around 42% (for restoring 40 packages) of the resources to copy the files to temp dir.
I feel that HasProjectContent check is not required while restoring packages as the package must be already applicable to the project, can we skip this while restoring?
using (Stream targetStream = _expandedFileSystem.CreateFile(filePath))
{
partStream.CopyTo(targetStream);
}
> NuGet.Core.dll!NuGet.OptimizedZipPackage.EnsurePackageFiles() Line 288 C#
NuGet.Core.dll!NuGet.OptimizedZipPackage.GetFilesBase() Line 160 + 0x8 bytes C#
NuGet.Core.dll!NuGet.LocalPackage.GetFiles() Line 198 + 0xb bytes C#
NuGet.Core.dll!NuGet.DataServicePackage.GetFiles() Line 320 + 0x14 bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.GetFiles(NuGet.IPackage package, string directory) Line 67 + 0x9 bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.GetContentFiles(NuGet.IPackage package) Line 72 + 0xe bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.HasProjectContent(NuGet.IPackage package) Line 160 + 0x50 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.GetPackageTarget(NuGet.IPackage package) Line 243 + 0x8 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.GetPackageInfo(NuGet.IPackage package) Line 235 + 0x8 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.ProcessPackageTarget(NuGet.IPackage package) Line 181 + 0xb bytes C#
NuGet.Core.dll!NuGet.PackageWalker.Walk(NuGet.IPackage package) Line 156 + 0xb bytes C#
NuGet.Core.dll!NuGet.InstallWalker.ResolveOperations(NuGet.IPackage package) Line 363 + 0xb bytes C#
NuGet.Core.dll!NuGet.PackageManager.Execute(NuGet.IPackage package, NuGet.IPackageOperationResolver resolver) Line 124 + 0xc bytes C#
NuGet.Core.dll!NuGet.PackageManager.InstallPackage(NuGet.IPackage package, System.Runtime.Versioning.FrameworkName targetFramework, bool ignoreDependencies, bool allowPrereleaseVersions) Line 114 + 0x6c bytes C#
NuGet.Core.dll!NuGet.PackageManager.InstallPackage(NuGet.IPackage package, bool ignoreDependencies, bool allowPrereleaseVersions) Line 109 + 0x17 bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.InstallPackage.AnonymousMethod__0() Line 19 + 0x22 bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.ExecuteLocked(string name, System.Action action) Line 47 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.InstallPackage(NuGet.IPackageManager packageManager, NuGet.IPackage package) Line 19 + 0x29 bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackage(NuGet.PackageReference package, NuGet.IFileSystem fileSystem) Line 277 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackages(string packageReferenceFileFullPath, NuGet.IFileSystem fileSystem) Line 313 + 0xe bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.PackageRestore(EnvDTE.Project project) Line 242 + 0xe bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackages() Line 112 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.BuildEvents_OnBuildBegin(EnvDTE.vsBuildScope Scope, EnvDTE.vsBuildAction Action) Line 88 + 0x8 bytes C#
Comments: comment from @dotnetjunky: Fei, did you set the ignoreDependencies = true when calling PackageManager.InstalllPackage()? That will prevent the the package unpacking.
I feel that HasProjectContent check is not required while restoring packages as the package must be already applicable to the project, can we skip this while restoring?
using (Stream targetStream = _expandedFileSystem.CreateFile(filePath))
{
partStream.CopyTo(targetStream);
}
> NuGet.Core.dll!NuGet.OptimizedZipPackage.EnsurePackageFiles() Line 288 C#
NuGet.Core.dll!NuGet.OptimizedZipPackage.GetFilesBase() Line 160 + 0x8 bytes C#
NuGet.Core.dll!NuGet.LocalPackage.GetFiles() Line 198 + 0xb bytes C#
NuGet.Core.dll!NuGet.DataServicePackage.GetFiles() Line 320 + 0x14 bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.GetFiles(NuGet.IPackage package, string directory) Line 67 + 0x9 bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.GetContentFiles(NuGet.IPackage package) Line 72 + 0xe bytes C#
NuGet.Core.dll!NuGet.PackageExtensions.HasProjectContent(NuGet.IPackage package) Line 160 + 0x50 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.GetPackageTarget(NuGet.IPackage package) Line 243 + 0x8 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.GetPackageInfo(NuGet.IPackage package) Line 235 + 0x8 bytes C#
NuGet.Core.dll!NuGet.PackageWalker.ProcessPackageTarget(NuGet.IPackage package) Line 181 + 0xb bytes C#
NuGet.Core.dll!NuGet.PackageWalker.Walk(NuGet.IPackage package) Line 156 + 0xb bytes C#
NuGet.Core.dll!NuGet.InstallWalker.ResolveOperations(NuGet.IPackage package) Line 363 + 0xb bytes C#
NuGet.Core.dll!NuGet.PackageManager.Execute(NuGet.IPackage package, NuGet.IPackageOperationResolver resolver) Line 124 + 0xc bytes C#
NuGet.Core.dll!NuGet.PackageManager.InstallPackage(NuGet.IPackage package, System.Runtime.Versioning.FrameworkName targetFramework, bool ignoreDependencies, bool allowPrereleaseVersions) Line 114 + 0x6c bytes C#
NuGet.Core.dll!NuGet.PackageManager.InstallPackage(NuGet.IPackage package, bool ignoreDependencies, bool allowPrereleaseVersions) Line 109 + 0x17 bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.InstallPackage.AnonymousMethod__0() Line 19 + 0x22 bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.ExecuteLocked(string name, System.Action action) Line 47 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.Common.PackageExtractor.InstallPackage(NuGet.IPackageManager packageManager, NuGet.IPackage package) Line 19 + 0x29 bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackage(NuGet.PackageReference package, NuGet.IFileSystem fileSystem) Line 277 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackages(string packageReferenceFileFullPath, NuGet.IFileSystem fileSystem) Line 313 + 0xe bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.PackageRestore(EnvDTE.Project project) Line 242 + 0xe bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.RestorePackages() Line 112 + 0xb bytes C#
NuGet.VsEvents.dll!NuGet.VsEvents.PackageRestorer.BuildEvents_OnBuildBegin(EnvDTE.vsBuildScope Scope, EnvDTE.vsBuildAction Action) Line 88 + 0x8 bytes C#
Comments: comment from @dotnetjunky: Fei, did you set the ignoreDependencies = true when calling PackageManager.InstalllPackage()? That will prevent the the package unpacking.