Skip to content

Severe performance regression in FlatTrackingData when using CreateFileW #2052

@rainersigwald

Description

@rainersigwald

Originally reported at https://developercommunity.visualstudio.com/content/problem/37589/regression-debug-slow-to-start-when-always-build-i.html

Performance traces indicate that a major part of the performance problem reported comes down to calling CreateFile() + GetFileTime() instead of GetFileAttributesEx() when stating files.

This change was made in #648 to supporting symlinks as source files.

Performance traces
Dev14

Name                                                                                                                                                                		  Inc
|||+ microsoft.build.utilities.core.ni![COLD] Microsoft.Build.Utilities.FlatTrackingData.ConstructFileTable()                                                      		271.818
||||+ microsoft.build.utilities.core.ni!FlatTrackingData.UpdateFileEntryDetails                                                                                    		271.313
|||||+ microsoft.build.utilities.core.ni!FlatTrackingData.RecordEntryDetails                                                                                       		264.189
||||||+ microsoft.build.utilities.core.ni!FlatTrackingData.GetLastWriteTimeUtc                                                                                     		247.695
|||||||+ microsoft.build.utilities.core.ni!NativeMethods.GetLastWriteTimeUtc                                                                                       		208.277
||||||||+ microsoft.build.utilities.core.ni!DomainBoundILStubClass.IL_STUB_PInvoke(System.String, Int32, Microsoft.Build.Utilities.WIN32_FILE_ATTRIBUTE_DATA ByRef)		207.287
|||||||||+ kernelbase!GetFileAttributesExW                                                                                                                         		205.572

Dev15

Name                                                                                                                                             		    Inc
|| + microsoft.build.utilities.core.ni![COLD] Microsoft.Build.Utilities.FlatTrackingData.ConstructFileTable()                                    		2,205.569
|| |+ microsoft.build.utilities.core!FlatTrackingData.UpdateFileEntryDetails                                                                     		2,201.341
|| ||+ microsoft.build.utilities.core.ni!FlatTrackingData.RecordEntryDetails                                                                     		2,177.880
|| |||+ microsoft.build.utilities.core.ni!FlatTrackingData.GetLastWriteTimeUtc                                                                   		2,148.838
|| ||||+ microsoft.build.utilities.core.ni!NativeMethodsShared.GetLastWriteFileUtcTime                                                           		2,055.619
|| |||||+ microsoft.build.utilities.core.ni!DomainBoundILStubClass.IL_STUB_PInvoke(System.String, UInt32, UInt32, IntPtr, UInt32, UInt32, IntPtr)		1,735.259
|| ||||||+ kernelbase!CreateFileW                                                                                                                		1,724.177

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions