簡體   English   中英

Visual Studio 2022 上的 F# 非常慢

[英]F# on Visual Studio 2022 very slow

這僅適用於 Visual Studio 2022。我已經卸載了 VS2019 和 Preview,其中 F# 工作得非常好(F# 5.0)。 我正在使用 VS2022 使用 F# 6.0 並且不想將 go 回 F# 5.0。

該問題特定於 F#。 我還使用 C#,在 VS2022 下運行最新的 C# 沒有問題。

幾乎連續的 DevEnv 進程正在運行,消耗了我 CPU 的 4 個超線程中的 1 到 4 個。 我已經關閉了在 F# 設置中可以找到的所有實驗選項。

有時有 2 個或更多后台進程正在運行,有時暫停,有時沒有 - 這與后台 CPU 消耗之間似乎沒有相關性

有時我會彈出一個關於等待完成編輯過程或編譯過程的對話框。

當 devenev.exe 在屬性下消耗 CPU 周期時,我看到總是有一個clr.dllCoUnInitializeEE+0x6790是罪魁禍首。 我認為這是一個短暫的過程嗎? 有時有兩個或三個消耗大部分超線程(其他相同,但 CPU 消耗非常低或沒有)。 有罪線程上的堆棧如下:

1, Microsoft.FSharp.Collections.SeqModule+Zip@633[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Invoke(System.__Canon, System.__Canon) + 0x50 <-- FSharp.Core.ni.dll+0x83f430
2, Microsoft.FSharp.Collections.Internal+IEnumerator+map2@103[[System.__Canon, mscorlib],[System.__Canon, mscorlib],[System.__Canon, mscorlib]].DoMoveNext(System.__Canon ByRef) + 0xca <-- FSharp.Core.ni.dll+0x8476ba
3, Microsoft.FSharp.Collections.Internal+IEnumerator+MapEnumerator`1[[System.__Canon, mscorlib]].System.Collections.IEnumerator.MoveNext() + 0x40 <-- FSharp.Core.ni.dll+0x847270
4, Microsoft.FSharp.Collections.SeqModule.ForAll[[System.__Canon, mscorlib]](Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,Boolean>, System.Collections.Generic.IEnumerable`1<System.__Canon>) + 0x76 <-- FSharp.Core.ni.dll+0x753466
5, FSharp.Compiler.Symbols.SymbolHelpers+ItemDisplayPartialEquality@485.System.Collections.Generic.IEqualityComparer<FSharp.Compiler.NameResolution.Item>.Equals(Item, Item) + 0x24 <-- FSharp.Compiler.Service.ni.dll+0x2900294
6, System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Insert(System.__Canon, System.__Canon, Boolean) + 0x200 <-- mscorlib.ni.dll+0x57bea0
7, Internal.Utilities.Library.IPartialEqualityComparer+partialDistinctBy@1001[[System.__Canon, mscorlib]].Invoke(System.__Canon) + 0xb0 <-- FSharp.Compiler.Service.ni.dll+0x2bc9540
8, Microsoft.FSharp.Primitives.Basics.List.filterToFreshConsTail[[System.__Canon, mscorlib]](Microsoft.FSharp.Collections.FSharpList`1<System.__Canon>, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,Boolean>, Microsoft.FSharp.Collections.FSharpList`1<System.__Canon>) + 0x4e <-- FSharp.Core.ni.dll+0x76060e
9, Microsoft.FSharp.Primitives.Basics.List.filter[[System.__Canon, mscorlib]](Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,Boolean>, Microsoft.FSharp.Collections.FSharpList`1<System.__Canon>) + 0xe7 <-- FSharp.Core.ni.dll+0x760747
10, FSharp.Compiler.EditorServices.DeclarationListInfo.Create(InfoReader, AccessorDomain, FSharp.Compiler.Text.Range, DisplayEnv, Microsoft.FSharp.Core.FSharpFunc`2<Item,FSharp.Compiler.Symbols.FSharpAccessibility>, Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.EditorServices.CompletionItem>, Microsoft.FSharp.Core.FSharpOption`1<System.String[]>, Boolean) + 0x2a0 <-- FSharp.Compiler.Service.ni.dll+0x274a830
11, <StartupCode$FSharp-Compiler-Service>.$FSharpCheckerResults+GetDeclarations@1088.Invoke(Microsoft.FSharp.Core.Unit) + 0x2a0 <-- FSharp.Compiler.Service.ni.dll+0x289c0b0
12, FSharp.Compiler.Diagnostics.ErrorScope.Protect[[System.__Canon, mscorlib]](FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,System.__Canon>, Microsoft.FSharp.Core.FSharpFunc`2<System.String,System.__Canon>) + 0x58 <-- FSharp.Compiler.Service.ni.dll+0x24a7d28
13, FSharp.Compiler.CodeAnalysis.TypeCheckInfo.GetDeclarations(Microsoft.FSharp.Core.FSharpOption`1<FSharp.Compiler.CodeAnalysis.FSharpParseFileResults>, Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.EditorServices.AssemblySymbol>>) + 0x101 <-- FSharp.Compiler.Service.ni.dll+0x27b3831
14, <StartupCode$FSharp-Compiler-Service>.$FSharpCheckerResults+GetDeclarationListInfo@1953-1.Invoke(FSharp.Compiler.CodeAnalysis.TypeCheckInfo) + 0x31 <-- FSharp.Compiler.Service.ni.dll+0x28a33d1
15, <StartupCode$FSharp-Editor>.$CompletionProvider+ProvideCompletionsAsyncAux@110-6.Invoke(Microsoft.CodeAnalysis.Text.SourceText) + 0x143 <-- 0x7ffdb4beacd3
16, Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvokeNoHijackCheck[[System.__Canon, mscorlib],[System.__Canon, mscorlib]](Microsoft.FSharp.Control.AsyncActivation`1<System.__Canon>, System.__Canon, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,Microsoft.FSharp.Control.FSharpAsync`1<System.__Canon>>) + 0x3e <-- FSharp.Core.ni.dll+0x7c756e
17, clr.dll+0x42b6
18, Microsoft.FSharp.Control.Trampoline.Execute(Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.AsyncReturn>) + 0x60 <-- FSharp.Core.ni.dll+0x7c5420
19, <StartupCode$FSharp-Core>.$Async+AwaitWaitHandle@1661-3.Invoke(System.Object, Boolean) + 0xc5 <-- FSharp.Core.ni.dll+0x824265
20, System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) + 0x172 <-- mscorlib.ni.dll+0x58df12
21, System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) + 0x15 <-- mscorlib.ni.dll+0x58dd95
22, System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object, Boolean) + 0xed <-- mscorlib.ni.dll+0xf3676d
23, clr.dll!CoUninitializeEE+0x1b73
24, clr.dll!CoUninitializeEE+0x1a88
25, clr.dll!DllRegisterServerInternal+0x19f43
26, clr.dll!TranslateSecurityAttributes+0x298b3
27, clr.dll!CoUninitializeEE+0x2f30
28, clr.dll!CoUninitializeEE+0x2ea3
29, clr.dll!CoUninitializeEE+0x2de2
30, clr.dll!CoUninitializeEE+0x2fc7
31, clr.dll!TranslateSecurityAttributes+0x296ff
32, clr.dll!ReOpenMetaDataWithMemoryEx+0x1252
33, clr.dll!ReOpenMetaDataWithMemoryEx+0x4090
34, clr.dll!GetMetaDataPublicInterfaceFromInternal+0x1bde5
35, clr.dll!CoUninitializeEE+0x6815
36, kernel32.dll!BaseThreadInitThunk+0x14
37, ntdll.dll!RtlUserThreadStart+0x21

我已經為 windows C# 和 F# 項目重新安裝了 VS2022,僅此而已。

希望這是足夠的信息,可以為正在發生的事情提供線索。

更新

請參閱評論以了解我在整理方面的進一步努力,並擁有我認為需要的框架 4.6 和 4.7 點網 dll/運行時,並且只有一個點網核心,我認為它是 6.0,但被列為Microsoft .NET Core SDK - 2.1.202(x64) - 如果這是問題。

問題似乎仍然是 CoUninitialize,它應該是一個用於卸載 COM 對象的短期線程 - 請參閱https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-couninitialize F# 的哪一點正在使用 Com 無法卸載的對象,因為在編輯/編譯 C# 項目時不會發生這種情況?

更新 2

我再次使用最少的點網庫 IIRC 重新安裝了 VS2022,它需要 4.6 和 4.7 框架才能安裝一些 C# 和 F#。 現在一切都回來了,而我什么也沒做,包括沒有自動更新等。這是來自dotnet --info的最新轉儲:

PS ..> dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.100
 Commit:    9e8b04bbff

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\6.0.100\

Host (useful for support):
  Version: 6.0.0
  Commit:  4822e3c3aa

.NET SDKs installed:
  2.1.202 [C:\Program Files\dotnet\sdk]
  3.1.413 [C:\Program Files\dotnet\sdk]
  5.0.302 [C:\Program Files\dotnet\sdk]
  5.0.403 [C:\Program Files\dotnet\sdk]
  6.0.100 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.All 2.1.28 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.29 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.28 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.29 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.18 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.19 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.21 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.28 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.29 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.18 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.19 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.21 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.18 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.19 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.8 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.9 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

再次使用dotnet-core-uninstall后,一些 skds/runtimes 神奇地重新出現在當前的 output 中:

    PS C:\WINDOWS\system32> dotnet-core-uninstall list

This tool cannot uninstall versions of the runtime or SDK that are 
    - SDKs installed using Visual Studio 2019 Update 3 or later.
    - SDKs and runtimes installed via zip/scripts.
    - Runtimes installed with SDKs (these should be removed by removing that SDK).
The versions that can be uninstalled with this tool are:

.NET Core SDKs:
  5.0.403  x64    [Used by Visual Studio. Specify individually or use --force to remove]
  2.1.202  x64    [Used by Visual Studio. Specify individually or use --force to remove]

.NET Core Runtimes:

ASP.NET Core Runtimes:
  5.0.12  x86
  5.0.10  x64
  3.1.21  x64
  2.1.30  x64

.NET Core Runtime & Hosting Bundles:

請使用 windows 中的人員應用程序或 Visual Studio 安裝程序向 Microsoft 報告。

目前,只有一個選擇:使用 Visual Studio 2019。或嘗試尋找替代方案。 網絡周圍應該有某個地方

我建議使用 Rider IDE 代替(直到開發人員修復錯誤):下載 Rider IDE

我並不是真的想在這里做廣告,只是建議一個 IDE 太編譯並運行你的 rprogram。

我不知道為什么,但我運行了 Chris Titus 的 Windows debloat並進行了一般清理,例如啟動、服務和刪除舊/未使用的程序以及解決問題的方法。 對其他人來說並不是真正的答案,但也許這也可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM