Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Modify XmlSerializators to use typed XmlWriter.WriteValue method by TrayanZapryanov · Pull Request #75415 · dotnet/runtime · GitHub
Skip to content

Modify XmlSerializators to use typed XmlWriter.WriteValue method - #75415

Closed
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers
Closed

Modify XmlSerializators to use typed XmlWriter.WriteValue method#75415
TrayanZapryanov wants to merge 3 commits into
dotnet:mainfrom
TrayanZapryanov:fix_writing_primitive_types_in_serializers

Conversation

@TrayanZapryanov

@TrayanZapryanovTrayanZapryanov commented Sep 11, 2022

Copy link
Copy Markdown
Contributor

Modify XmlSerializators to use typed XmlWriter.WriteValue method instead of converting to string when value is primitive.
Once Optimization goes in, this should reduce allocations.

Here are some benchmarks from performance repo:
BenchmarkDotNet=v0.13.1.1847-nightly, OS=Windows 10 (10.0.19043.1889/21H1/May2021Update)
11th Gen Intel Core i9-11900K 3.50GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=7.0.100-preview.7.22377.5
[Host] : .NET 7.0.0 (7.0.22.37506), X64 RyuJIT AVX2
Job-LGCOMF : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000 Toolchain=CoreRun IterationTime=250.0000 ms
MaxIterationCount=20 MinIterationCount=15 WarmupCount=1

Benchmark : MicroBenchmarks.Serializers.Xml_FromStream_IndexViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.41 μs0.670 μs0.594 μs85.53 μs83.64 μs86.16 μs4.45210.684937.89 KB
XmlSerializer48.82 μs0.372 μs0.348 μs48.71 μs48.45 μs49.51 μs5.23760.775944.24 KB

After both PRs are in a branch:

MethodMeanErrorStdDevMedianMinMaxGen 0Gen 1Allocated
DataContractSerializer85.60 μs0.227 μs0.190 μs85.56 μs85.39 μs86.07 μs4.43530.682437.89 KB
XmlSerializer47.76 μs0.900 μs0.925 μs47.80 μs45.41 μs49.34 μs5.27650.781743.63 KB

…ead of converting to string when value is primitive.
@ghostghost added community-contribution Indicates that the PR has been added by a community member area-Serialization labels Sep 11, 2022
@TrayanZapryanov
TrayanZapryanov marked this pull request as draft September 11, 2022 13:22
_w.WriteValue((ushort)(object)value);
else if (typeof(T) == typeof(uint))
_w.WriteValue((uint)(object)value);
//else if (typeof(T) == typeof(ulong))

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to support these also - we need to extend XmlWriter.WriteValue methods with ulong and guid

}

[RequiresUnreferencedCode("Calls WriteCheckDefault")]
private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeXsiType was always false in all call sites.
isElement was not used also

@TrayanZapryanov

Copy link
Copy Markdown
ContributorAuthor

Looks quote promising as results once both PRs are applied:
Benchmark :MicroBenchmarks.Serializers.Xml_ToStream_MyEventsListerViewModel
Before:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer401.8 μs5.09 μs4.25 μs403.0 μs389.9 μs405.9 μs11.3086102.98 KB
XmlSerializer251.3 μs3.05 μs2.55 μs251.4 μs243.6 μs253.9 μs8.064569.06 KB

After:

MethodMeanErrorStdDevMedianMinMaxGen 0Allocated
DataContractSerializer415.2 μs4.52 μs4.23 μs415.8 μs401.3 μs419.2 μs11.6667102.98 KB
XmlSerializer250.9 μs3.04 μs2.54 μs251.9 μs245.0 μs252.8 μs4.032334.28 KB

@ghostghost closed this Oct 12, 2022
@ghost

Copy link
Copy Markdown

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@ghostghost locked as resolved and limited conversation to collaborators Nov 11, 2022
@TrayanZapryanov
TrayanZapryanov deleted the fix_writing_primitive_types_in_serializers branch April 1, 2023 16:11
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Serializationcommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@TrayanZapryanov@Trayan-Zapryanov