Fix ServiceController name population perf (dotnet/corefx#32072)
authorDan Moseley <danmose@microsoft.com>
Tue, 4 Sep 2018 22:21:28 +0000 (15:21 -0700)
committerJan Kotas <jkotas@microsoft.com>
Wed, 5 Sep 2018 15:12:13 +0000 (08:12 -0700)
* Fix ServiceController name population perf

* Split tests

* Remove dead field

* Remove new use of DangerousGetHandle

* SafeHandle all the things!

* VSB #1

* VSB #2

* Fix GLE

* Initialize machineName in ctor

* Test for empty name ex

* Null names

* Inadvertent edit

* Unix build

* Move interop into class

* Reverse SafeHandle for HAllocGlobal

* Fix tests

* Disable test for NETFX

* CR feedback

* Pattern matching on VSB

* Direct call

* typo

Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
src/System.Private.CoreLib/shared/System/Text/ValueStringBuilder.cs

index 21cc3dc..74b5dac 100644 (file)
@@ -50,9 +50,20 @@ namespace System.Text
 
         /// <summary>
         /// Get a pinnable reference to the builder.
+        /// Does not ensure there is a null char after <see cref="Length"/>
+        /// This overload is pattern matched in the C# 7.3+ compiler so you can omit
+        /// the explicit method call, and write eg "fixed (char* c = builder)"
+        /// </summary>
+        public ref char GetPinnableReference()
+        {
+            return ref MemoryMarshal.GetReference(_chars);
+        }
+
+        /// <summary>
+        /// Get a pinnable reference to the builder.
         /// </summary>
         /// <param name="terminate">Ensures that the builder has a null char after <see cref="Length"/></param>
-        public ref char GetPinnableReference(bool terminate = false)
+        public ref char GetPinnableReference(bool terminate)
         {
             if (terminate)
             {