未验证 提交 af9fccfe 编写于 作者: W Will Smith 提交者: GitHub

Fixed background semantic classification store reading. Optimized read/writing...

Fixed background semantic classification store reading. Optimized read/writing ranges in stores (#11461)
上级 723a4c58
...@@ -6,6 +6,7 @@ open System ...@@ -6,6 +6,7 @@ open System
open System.IO open System.IO
open System.IO.MemoryMappedFiles open System.IO.MemoryMappedFiles
open System.Reflection.Metadata open System.Reflection.Metadata
open System.Runtime.InteropServices
open FSharp.NativeInterop open FSharp.NativeInterop
open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.IL
open FSharp.Compiler.Infos open FSharp.Compiler.Infos
...@@ -17,6 +18,7 @@ open FSharp.Compiler.TypedTree ...@@ -17,6 +18,7 @@ open FSharp.Compiler.TypedTree
open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeBasics
#nowarn "9" #nowarn "9"
#nowarn "51"
/// These tags are used to create unique item key strings to decrease possible key string collisions when the Items are actually completely different. /// These tags are used to create unique item key strings to decrease possible key string collisions when the Items are actually completely different.
[<RequireQualifiedAccess>] [<RequireQualifiedAccess>]
...@@ -94,21 +96,16 @@ module ItemKeyTags = ...@@ -94,21 +96,16 @@ module ItemKeyTags =
[<Sealed>] [<Sealed>]
type ItemKeyStore(mmf: MemoryMappedFile, length) = type ItemKeyStore(mmf: MemoryMappedFile, length) =
let rangeBuffer = Array.zeroCreate<byte> sizeof<range>
let mutable isDisposed = false let mutable isDisposed = false
let checkDispose() = let checkDispose() =
if isDisposed then if isDisposed then
raise (ObjectDisposedException("ItemKeyStore")) raise (ObjectDisposedException("ItemKeyStore"))
member _.ReadRange(reader: byref<BlobReader>) = member _.ReadRange(reader: byref<BlobReader>) =
let startLine = reader.ReadInt32() reader.ReadBytes(sizeof<range>, rangeBuffer, 0)
let startColumn = reader.ReadInt32() MemoryMarshal.Cast<byte, range>(Span(rangeBuffer)).[0]
let endLine = reader.ReadInt32()
let endColumn = reader.ReadInt32()
let fileIndex = reader.ReadInt32()
let posStart = mkPos startLine startColumn
let posEnd = mkPos endLine endColumn
mkFileIndexRange fileIndex posStart posEnd
member _.ReadKeyString(reader: byref<BlobReader>) = member _.ReadKeyString(reader: byref<BlobReader>) =
let size = reader.ReadInt32() let size = reader.ReadInt32()
...@@ -174,11 +171,9 @@ and [<Sealed>] ItemKeyStoreBuilder() = ...@@ -174,11 +171,9 @@ and [<Sealed>] ItemKeyStoreBuilder() =
b.WriteUTF16 str b.WriteUTF16 str
let writeRange (m: range) = let writeRange (m: range) =
b.WriteInt32(m.StartLine) let mutable m = m
b.WriteInt32(m.StartColumn) let ptr = &&m |> NativePtr.toNativeInt |> NativePtr.ofNativeInt<byte>
b.WriteInt32(m.EndLine) b.WriteBytes(ptr, sizeof<range>)
b.WriteInt32(m.EndColumn)
b.WriteInt32(m.FileIndex)
let writeEntityRef (eref: EntityRef) = let writeEntityRef (eref: EntityRef) =
writeString ItemKeyTags.entityRef writeString ItemKeyTags.entityRef
......
...@@ -6,8 +6,10 @@ open System ...@@ -6,8 +6,10 @@ open System
open System.IO open System.IO
open System.IO.MemoryMappedFiles open System.IO.MemoryMappedFiles
open System.Reflection.Metadata open System.Reflection.Metadata
open System.Runtime.InteropServices
open FSharp.NativeInterop open FSharp.NativeInterop
open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CodeAnalysis
open FSharp.Compiler.Text
open FSharp.Compiler.Text.Position open FSharp.Compiler.Text.Position
open FSharp.Compiler.Text.Range open FSharp.Compiler.Text.Range
...@@ -15,16 +17,12 @@ open FSharp.Compiler.Text.Range ...@@ -15,16 +17,12 @@ open FSharp.Compiler.Text.Range
[<Sealed>] [<Sealed>]
type SemanticClassificationView(mmf: MemoryMappedFile, length) = type SemanticClassificationView(mmf: MemoryMappedFile, length) =
member _.ReadRange(reader: byref<BlobReader>) =
let startLine = reader.ReadInt32()
let startColumn = reader.ReadInt32()
let endLine = reader.ReadInt32()
let endColumn = reader.ReadInt32()
let fileIndex = reader.ReadInt32()
let posStart = mkPos startLine startColumn let buffer = Array.zeroCreate<byte> sizeof<SemanticClassificationItem>
let posEnd = mkPos endLine endColumn
mkFileIndexRange fileIndex posStart posEnd member _.ReadItem(reader: byref<BlobReader>) =
reader.ReadBytes(sizeof<SemanticClassificationItem>, buffer, 0)
MemoryMarshal.Cast<byte, SemanticClassificationItem>(Span(buffer)).[0]
member this.ForEach(f: SemanticClassificationItem -> unit) = member this.ForEach(f: SemanticClassificationItem -> unit) =
use view = mmf.CreateViewAccessor(0L, length) use view = mmf.CreateViewAccessor(0L, length)
...@@ -32,9 +30,7 @@ type SemanticClassificationView(mmf: MemoryMappedFile, length) = ...@@ -32,9 +30,7 @@ type SemanticClassificationView(mmf: MemoryMappedFile, length) =
reader.Offset <- 0 reader.Offset <- 0
while reader.Offset < reader.Length do while reader.Offset < reader.Length do
let m = this.ReadRange &reader let item = this.ReadItem(&reader)
let sct = reader.ReadInt32()
let item = SemanticClassificationItem((m, (enum<SemanticClassificationType>(sct))))
f item f item
[<Sealed>] [<Sealed>]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册