From efaa18bf1e1ab28963189547df7a85cd45f88049 Mon Sep 17 00:00:00 2001 From: Dylan Perks <11160611+Perksey@users.noreply.github.com> Date: Mon, 9 Oct 2023 19:50:44 -0500 Subject: [PATCH] Cache GetProcessHeap --- src/Core/Silk.NET.Core/Native/Structs/WinString.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Core/Silk.NET.Core/Native/Structs/WinString.cs b/src/Core/Silk.NET.Core/Native/Structs/WinString.cs index ef333167be..0ce671a23c 100644 --- a/src/Core/Silk.NET.Core/Native/Structs/WinString.cs +++ b/src/Core/Silk.NET.Core/Native/Structs/WinString.cs @@ -34,7 +34,7 @@ public WinString(nuint nChars) [DllImport("kernel32.dll")] static extern void* HeapAlloc(void* heap, uint dwFlags, nuint dwBytes); - HString = (Header*)HeapAlloc(GetProcessHeap(), 0, (nuint)sizeof(Header) + 2 * nChars); + HString = (Header*)HeapAlloc(ProcessHeap, 0, (nuint)sizeof(Header) + 2 * nChars); HString->Flags = 0; HString->Length = (uint)nChars; HString->Reserved0 = 0; @@ -55,7 +55,7 @@ public void Release() if (Interlocked.Decrement(ref HString->RefCount) < 1) { - if (HeapFree(GetProcessHeap(), 0, HString) == 0) + if (HeapFree(ProcessHeap, 0, HString) == 0) { SilkMarshal.ThrowHResult(Marshal.GetHRForLastWin32Error()); } @@ -78,6 +78,8 @@ public static WinString DangerousCreate(char* str, uint length, Header* header) [DllImport("kernel32.dll")] private static extern void* GetProcessHeap(); + private static readonly void* ProcessHeap = GetProcessHeap(); + public void Dispose() => Release(); public static implicit operator string(WinString winString) => winString.ToString();