From a280612764b2c881d70e585a5396da3d7c9dcb94 Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 13 Jan 2022 23:22:56 -0500 Subject: [PATCH] String serializer optimizations 2x performance --- HyperSerializer/HyperSerializer.csproj | 2 +- HyperSerializer/SnippetsSafe.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/HyperSerializer/HyperSerializer.csproj b/HyperSerializer/HyperSerializer.csproj index 0cb5a33..6b9362f 100644 --- a/HyperSerializer/HyperSerializer.csproj +++ b/HyperSerializer/HyperSerializer.csproj @@ -17,7 +17,7 @@ true true https://github.com/Hyperlnq/HyperSerializer - 1.0.9 + 1.0.10 diff --git a/HyperSerializer/SnippetsSafe.cs b/HyperSerializer/SnippetsSafe.cs index cf5959d..b067ee1 100644 --- a/HyperSerializer/SnippetsSafe.cs +++ b/HyperSerializer/SnippetsSafe.cs @@ -7,8 +7,8 @@ internal class SnippetsSafe : ISnippets public string PropertyTemplateDeserializeLocal { get { return "var _{0} = ({1}) MemoryMarshal.Read<{1}>(bytes.Slice(offset+=offsetWritten, offsetWritten = {2}));"; } } public string PropertyTemplateSerializeNullable { get { return "var _{0} = {1}?.{0} ?? default; offset+=offsetWritten; if(((bytes[offset++] = (byte)({1}?.{0}==null ? 1 : 0)) != 1)) MemoryMarshal.Write(bytes.Slice(offset, offsetWritten = {2}), ref _{0}); else offsetWritten = 0;"; } } public string PropertyTemplateDeserializeNullable { get { return "offset+=offsetWritten; if(bytes[offset++] != 1) {0} = ({1}?) MemoryMarshal.Read<{1}>(bytes.Slice(offset, offsetWritten = {2})); else offsetWritten = 0;"; } } - public string PropertyTemplateSerializeVarLenStr { get { return "if(_{1} > 0) Utf8Encoding.GetBytes({0}.AsSpan(),bytes.Slice(offset+=offsetWritten, offsetWritten = _{1}));"; } } - public string PropertyTemplateDeserializeVarLenStr { get { return "{0} = (_{1} >= 0) ? Utf8Encoding.GetString(bytes.Slice(offset += offsetWritten, offsetWritten = _{1})) : null;"; } } + public string PropertyTemplateSerializeVarLenStr { get { return "if(_{1} > 0) MemoryMarshal.AsBytes({0}.AsSpan(),bytes.Slice(offset+=offsetWritten, offsetWritten = _{1}));"; } } + public string PropertyTemplateDeserializeVarLenStr { get { return "{0} = (_{1} >= 0) ? MemoryMarshal.Cast(bytes.Slice(offset += offsetWritten, offsetWritten = _{1})).ToString() : null;"; } } public string StringLength { get { return "({0}?.Length ?? -1)"; } } public string StringLengthSpan { get { return "({0}?.Length ?? 0)"; } } public string ClassTemplate { get { return @"