Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5daaf82

Browse files
authored
Reduced allocation by reading from a stream into an array for ILResource (dotnet#4689)
* Reduced allocation by reading from a stream into an array for ILResource* GetRawFSharpSignatureData is now lazy getting bytes. This is what GetRawFSharpOptimizationData does* Using File.ReadBinaryChunk
1 parent297f67d commit5daaf82

File tree

5 files changed

+10
-11
lines changed

5 files changed

+10
-11
lines changed

‎src/absil/il.fs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module Microsoft.FSharp.Compiler.AbstractIL.IL
88

99

1010
openSystem
11+
openSystem.IO
1112
openSystem.Collections
1213
openSystem.Collections.Generic
1314
openSystem.Collections.Concurrent
@@ -1986,7 +1987,7 @@ type ILResource =
19861987
memberr.GetBytes()=
19871988
match r.Locationwith
19881989
| ILResourceLocation.LocalIn(file, start, len)->
1989-
FileSystem.ReadAllBytesShim(file).[start..start+len-1]
1990+
File.ReadBinaryChunk(file,start,len)
19901991
| ILResourceLocation.LocalOut bytes-> bytes
19911992
|_-> failwith"GetBytes"
19921993

‎src/absil/illib.fs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,7 @@ module Shim =
12911291
static memberReadBinaryChunk(fileName,start,len)=
12921292
use stream= FileSystem.FileStreamReadShim fileName
12931293
stream.Seek(int64 start, SeekOrigin.Begin)|> ignore
1294-
letbuffer= Array.zeroCreatelen
1294+
letbuffer= Array.zeroCreate len
12951295
let mutablen=0
12961296
while n< lendo
12971297
n<- n+ stream.Read(buffer, n, len-n)

‎src/fsharp/CompileOps.fs‎

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,7 @@ type IRawFSharpAssemblyData =
20982098
/// in the language service
20992099
abstractTryGetILModuleDef :unit->ILModuleDefoption
21002100
/// The raw F# signature data in the assembly, if any
2101-
abstractGetRawFSharpSignatureData :range* ilShortAssemName:string* fileName:string->(string*byte[])list
2101+
abstractGetRawFSharpSignatureData :range* ilShortAssemName:string* fileName:string->(string*(unit->byte[]))list
21022102
/// The raw F# optimization data in the assembly, if any
21032103
abstractGetRawFSharpOptimizationData :range* ilShortAssemName:string* fileName:string->(string*(unit->byte[]))list
21042104
/// The table of type forwarders in the assembly
@@ -3795,7 +3795,7 @@ let PickleToResource inMem file g scope rname p x =
37953795
MetadataIndex= NoMetadataIdx}
37963796

37973797
letGetSignatureData(file,ilScopeRef,ilModule,byteReader):PickledDataWithReferences<PickledCcuInfo>=
3798-
unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo byteReader
3798+
unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo(byteReader())
37993799

38003800
letWriteSignatureData(tcConfig:TcConfig,tcGlobals,exportRemapping,ccu:CcuThunk,file,inMem):ILResource=
38013801
letmspec= ccu.Contents
@@ -3831,16 +3831,15 @@ type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyR
38313831
letsigDataReaders=
38323832
[for iresourcein resourcesdo
38333833
if IsSignatureDataResource iresourcethen
3834-
letccuName= GetSignatureDataResourceName iresource
3835-
letbytes= iresource.GetBytes()
3836-
yield(ccuName, bytes)]
3834+
letccuName= GetSignatureDataResourceName iresource
3835+
yield(ccuName,fun()-> iresource.GetBytes())]
38373836

38383837
letsigDataReaders=
38393838
if sigDataReaders.IsEmpty&& List.contains ilShortAssemName externalSigAndOptDatathen
38403839
letsigFileName= Path.ChangeExtension(filename,"sigdata")
38413840
ifnot(FileSystem.SafeExists sigFileName)then
38423841
error(Error(FSComp.SR.buildExpectedSigdataFile(FileSystem.GetFullPathShim sigFileName), m))
3843-
[(ilShortAssemName, FileSystem.ReadAllBytesShim sigFileName)]
3842+
[(ilShortAssemName,fun()->FileSystem.ReadAllBytesShim sigFileName)]
38443843
else
38453844
sigDataReaders
38463845
sigDataReaders

‎src/fsharp/CompileOps.fsi‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ type IRawFSharpAssemblyData =
149149
abstractHasAnyFSharpSignatureDataAttribute:bool
150150
abstractHasMatchingFSharpSignatureDataAttribute:ILGlobals->bool
151151
/// The raw F# signature data in the assembly, if any
152-
abstractGetRawFSharpSignatureData:range* ilShortAssemName:string* fileName:string->(string*byte[])list
152+
abstractGetRawFSharpSignatureData:range* ilShortAssemName:string* fileName:string->(string*(unit->byte[]))list
153153
/// The raw F# optimization data in the assembly, if any
154154
abstractGetRawFSharpOptimizationData:range* ilShortAssemName:string* fileName:string->(string*(unit->byte[]))list
155155
/// The table of type forwarders in the assembly

‎src/fsharp/service/IncrementalBuild.fs‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,8 +1172,7 @@ type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState:
11721172
let_sigDataAttributes,sigDataResources= Driver.EncodeInterfaceData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile,true)
11731173
[for rin sigDataResourcesdo
11741174
letccuName= GetSignatureDataResourceName r
1175-
letbytes= r.GetBytes()
1176-
yield(ccuName, bytes)]
1175+
yield(ccuName,(fun()-> r.GetBytes()))]
11771176

11781177
letautoOpenAttrs= topAttrs.assemblyAttrs|> List.choose(List.singleton>> TryFindFSharpStringAttribute tcGlobals tcGlobals.attrib_AutoOpenAttribute)
11791178
letivtAttrs= topAttrs.assemblyAttrs|> List.choose(List.singleton>> TryFindFSharpStringAttribute tcGlobals tcGlobals.attrib_InternalsVisibleToAttribute)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp