AyCode.Core/BenchmarkSuite1/benchmark-report.html

829 lines
30 KiB
HTML
Raw Blame History

<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AcBinary vs MessagePack - Benchmark Riport</title>
<style>
:root {
--primary: #4f46e5;
--primary-light: #818cf8;
--success: #22c55e;
--warning: #f59e0b;
--danger: #ef4444;
--gray-50: #f9fafb;
--gray-100: #f3f4f6;
--gray-200: #e5e7eb;
--gray-300: #d1d5db;
--gray-600: #4b5563;
--gray-800: #1f2937;
--gray-900: #111827;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 2rem;
color: var(--gray-800);
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.card {
background: white;
border-radius: 16px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
padding: 2rem;
margin-bottom: 2rem;
}
.header {
text-align: center;
margin-bottom: 2rem;
}
.header h1 {
font-size: 2.5rem;
background: linear-gradient(135deg, var(--primary) 0%, #7c3aed 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 0.5rem;
}
.header .subtitle {
color: var(--gray-600);
font-size: 1.1rem;
}
.header .date {
color: var(--gray-400);
font-size: 0.9rem;
margin-top: 0.5rem;
}
h2 {
color: var(--gray-800);
font-size: 1.5rem;
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 3px solid var(--primary-light);
display: flex;
align-items: center;
gap: 0.5rem;
}
h3 {
color: var(--gray-700);
font-size: 1.2rem;
margin: 1.5rem 0 1rem;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 1rem;
font-size: 0.95rem;
}
th, td {
padding: 0.875rem 1rem;
text-align: left;
border-bottom: 1px solid var(--gray-200);
}
th {
background: var(--gray-50);
font-weight: 600;
color: var(--gray-700);
text-transform: uppercase;
font-size: 0.75rem;
letter-spacing: 0.05em;
}
tr:hover {
background: var(--gray-50);
}
.number {
font-family: 'Consolas', 'Monaco', monospace;
text-align: right;
}
.winner {
background: linear-gradient(90deg, rgba(34, 197, 94, 0.1) 0%, transparent 100%);
}
.winner td:first-child::before {
content: "?? ";
}
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
}
.badge-success {
background: rgba(34, 197, 94, 0.15);
color: #15803d;
}
.badge-warning {
background: rgba(245, 158, 11, 0.15);
color: #b45309;
}
.badge-danger {
background: rgba(239, 68, 68, 0.15);
color: #dc2626;
}
.badge-info {
background: rgba(79, 70, 229, 0.15);
color: var(--primary);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin-bottom: 1.5rem;
}
.stat-card {
background: var(--gray-50);
border-radius: 12px;
padding: 1.25rem;
text-align: center;
border: 1px solid var(--gray-200);
}
.stat-card .value {
font-size: 2rem;
font-weight: 700;
color: var(--primary);
font-family: 'Consolas', monospace;
}
.stat-card .label {
color: var(--gray-600);
font-size: 0.85rem;
margin-top: 0.25rem;
}
.stat-card.success .value { color: var(--success); }
.stat-card.warning .value { color: var(--warning); }
.stat-card.danger .value { color: var(--danger); }
.comparison-bar {
display: flex;
height: 32px;
border-radius: 8px;
overflow: hidden;
margin: 0.5rem 0;
background: var(--gray-100);
}
.comparison-bar .segment {
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 0.75rem;
font-weight: 600;
transition: all 0.3s ease;
}
.comparison-bar .segment:hover {
filter: brightness(1.1);
}
.segment.acbinary { background: var(--primary); }
.segment.msgpack { background: #f97316; }
.legend {
display: flex;
gap: 1.5rem;
margin-top: 0.5rem;
font-size: 0.85rem;
}
.legend-item {
display: flex;
align-items: center;
gap: 0.5rem;
}
.legend-color {
width: 16px;
height: 16px;
border-radius: 4px;
}
.summary-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
.summary-item {
background: var(--gray-50);
border-radius: 12px;
padding: 1.5rem;
border-left: 4px solid var(--primary);
}
.summary-item h4 {
color: var(--gray-800);
margin-bottom: 0.75rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.summary-item ul {
list-style: none;
color: var(--gray-600);
font-size: 0.9rem;
}
.summary-item li {
padding: 0.25rem 0;
padding-left: 1.25rem;
position: relative;
}
.summary-item li::before {
content: "?";
position: absolute;
left: 0;
color: var(--success);
}
.env-info {
background: var(--gray-50);
border-radius: 8px;
padding: 1rem;
font-size: 0.85rem;
color: var(--gray-600);
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 0.5rem;
}
.env-info span {
display: flex;
align-items: center;
gap: 0.5rem;
}
.note {
background: rgba(79, 70, 229, 0.1);
border-left: 4px solid var(--primary);
padding: 1rem;
border-radius: 0 8px 8px 0;
margin: 1rem 0;
font-size: 0.9rem;
color: var(--gray-700);
}
.warning-note {
background: rgba(245, 158, 11, 0.1);
border-left: 4px solid var(--warning);
}
.optimization-item {
background: var(--gray-50);
border-radius: 8px;
padding: 1rem;
margin-bottom: 1rem;
border-left: 4px solid var(--primary);
}
.optimization-item.high {
border-left-color: var(--success);
}
.optimization-item.medium {
border-left-color: var(--warning);
}
.optimization-item.low {
border-left-color: var(--gray-300);
}
.optimization-item h4 {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.5rem;
color: var(--gray-800);
}
.optimization-item p {
color: var(--gray-600);
font-size: 0.9rem;
margin-bottom: 0.5rem;
}
.optimization-item code {
background: var(--gray-200);
padding: 0.125rem 0.375rem;
border-radius: 4px;
font-size: 0.85rem;
}
.impact-badge {
font-size: 0.7rem;
padding: 0.125rem 0.5rem;
border-radius: 4px;
font-weight: 600;
}
.impact-high { background: rgba(34, 197, 94, 0.2); color: #15803d; }
.impact-medium { background: rgba(245, 158, 11, 0.2); color: #b45309; }
.impact-low { background: rgba(107, 114, 128, 0.2); color: var(--gray-600); }
footer {
text-align: center;
color: white;
opacity: 0.8;
padding: 1rem;
font-size: 0.85rem;
}
</style>
</head>
<body>
<div class="container">
<div class="card header">
<h1>?? AcBinary vs MessagePack</h1>
<div class="subtitle">Komplett Benchmark <20>sszehasonl<6E>t<EFBFBD>s + Mem<65>ria Diagnosztika</div>
<div class="date">Gener<EFBFBD>lva: 2024. december 13. | .NET 9.0 | Intel Core i7-10750H</div>
</div>
<!-- K<>rnyezet info -->
<div class="card">
<h2>??? Teszt K<>rnyezet</h2>
<div class="env-info">
<span>?? Windows 11 (23H2)</span>
<span>?? Intel Core i7-10750H @ 2.60GHz</span>
<span>?? .NET SDK 10.0.101</span>
<span>?? Runtime: .NET 9.0.11</span>
<span>?? BenchmarkDotNet v0.15.2</span>
<span>?? Teszt adat: 3<>3<EFBFBD>3<EFBFBD>4 hierarchia</span>
</div>
</div>
<!-- M<>ret <20>sszehasonl<6E>t<EFBFBD>s -->
<div class="card">
<h2>?? M<>ret <20>sszehasonl<6E>t<EFBFBD>s</h2>
<div class="stats-grid">
<div class="stat-card">
<div class="value">18.9 KB</div>
<div class="label">AcBinary WithRef</div>
</div>
<div class="stat-card">
<div class="value">15.8 KB</div>
<div class="label">AcBinary NoRef</div>
</div>
<div class="stat-card success">
<div class="value">11.2 KB</div>
<div class="label">MessagePack</div>
</div>
</div>
<h3>M<EFBFBD>ret ar<61>ny (MessagePack = 100%)</h3>
<div class="comparison-bar">
<div class="segment acbinary" style="width: 62.5%;">AcBinary: 168%</div>
<div class="segment msgpack" style="width: 37.5%;">MsgPack: 100%</div>
</div>
<div class="legend">
<div class="legend-item"><div class="legend-color" style="background: var(--primary);"></div> AcBinary</div>
<div class="legend-item"><div class="legend-color" style="background: #f97316;"></div> MessagePack</div>
</div>
<div class="note">
?? <strong>Megjegyz<EFBFBD>s:</strong> Az AcBinary nagyobb m<>retet eredm<64>nyez a be<62>p<EFBFBD>tett metaadat (property nevek t<>bl<62>ja) <20>s t<>pusinform<72>ci<63>k miatt, ami viszont lehet<65>v<EFBFBD> teszi a schema evol<6F>ci<63>t <20>s a gyorsabb deszerializ<69>l<EFBFBD>st.
</div>
</div>
<!-- Teljes<65>tm<74>ny t<>bl<62>zat -->
<div class="card">
<h2>? Teljes<65>tm<74>ny <20>sszehasonl<6E>t<EFBFBD>s</h2>
<table>
<thead>
<tr>
<th>M<EFBFBD>velet</th>
<th class="number">AcBinary</th>
<th class="number">MessagePack</th>
<th class="number">Ar<EFBFBD>ny</th>
<th>Eredm<EFBFBD>ny</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Serialize WithRef</strong></td>
<td class="number">84.20 ?s</td>
<td class="number">18.84 ?s</td>
<td class="number">4.47<EFBFBD></td>
<td><span class="badge badge-warning">MsgPack gyorsabb</span></td>
</tr>
<tr>
<td><strong>Serialize NoRef</strong></td>
<td class="number">70.18 ?s</td>
<td class="number">18.84 ?s</td>
<td class="number">3.73<EFBFBD></td>
<td><span class="badge badge-warning">MsgPack gyorsabb</span></td>
</tr>
<tr class="winner">
<td><strong>Deserialize WithRef</strong></td>
<td class="number">40.10 ?s</td>
<td class="number">41.10 ?s</td>
<td class="number">0.98<EFBFBD></td>
<td><span class="badge badge-success">AcBinary gyorsabb</span></td>
</tr>
<tr class="winner">
<td><strong>Deserialize NoRef</strong></td>
<td class="number">1.02 ?s</td>
<td class="number">41.10 ?s</td>
<td class="number">0.025<EFBFBD></td>
<td><span class="badge badge-success">40<EFBFBD> gyorsabb!</span></td>
</tr>
<tr>
<td><strong>Populate</strong></td>
<td class="number">39.27 ?s</td>
<td class="number"><EFBFBD></td>
<td class="number"><EFBFBD></td>
<td><span class="badge badge-info">Csak AcBinary</span></td>
</tr>
<tr>
<td><strong>PopulateMerge</strong></td>
<td class="number">40.73 ?s</td>
<td class="number"><EFBFBD></td>
<td class="number"><EFBFBD></td>
<td><span class="badge badge-info">Csak AcBinary</span></td>
</tr>
</tbody>
</table>
</div>
<!-- Mem<65>ria haszn<7A>lat -->
<div class="card">
<h2>?? Mem<65>ria Allok<6F>ci<63> (GC Diagnosztika)</h2>
<table>
<thead>
<tr>
<th>M<EFBFBD>velet</th>
<th class="number">AcBinary</th>
<th class="number">MessagePack</th>
<th class="number">Gen0</th>
<th class="number">Gen1</th>
<th><EFBFBD>rt<EFBFBD>kel<EFBFBD>s</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Serialize WithRef</strong></td>
<td class="number">55.34 KB</td>
<td class="number">12.50 KB</td>
<td class="number">9.03</td>
<td class="number"><EFBFBD></td>
<td><span class="badge badge-warning">4.43<EFBFBD> t<>bb</span></td>
</tr>
<tr>
<td><strong>Serialize NoRef</strong></td>
<td class="number">46.30 KB</td>
<td class="number">12.50 KB</td>
<td class="number">7.45</td>
<td class="number"><EFBFBD></td>
<td><span class="badge badge-warning">3.70<EFBFBD> t<>bb</span></td>
</tr>
<tr>
<td><strong>Deserialize WithRef</strong></td>
<td class="number">38.17 KB</td>
<td class="number">26.24 KB</td>
<td class="number">6.23</td>
<td class="number">0.43</td>
<td><span class="badge badge-warning">1.45<EFBFBD> t<>bb</span></td>
</tr>
<tr class="winner">
<td><strong>Deserialize NoRef</strong></td>
<td class="number">2.85 KB</td>
<td class="number">26.24 KB</td>
<td class="number">0.47</td>
<td class="number">0.004</td>
<td><span class="badge badge-success">9<EFBFBD> kevesebb!</span></td>
</tr>
</tbody>
</table>
<div class="note warning-note">
?? <strong>GC Pressure:</strong> A Serialize WithRef 9.03 Gen0 GC-t triggerel 1000 m<>veletre. Ez jelent<6E>s GC nyom<6F>st jelent nagy <20>tereszt<7A>k<EFBFBD>pess<73>g<EFBFBD> szerver alkalmaz<61>sokban.
</div>
</div>
<!-- Allok<6F>ci<63>s hotspotok -->
<div class="card">
<h2>?? Mem<65>ria Allok<6F>ci<63>s Hotspotok</h2>
<h3>Serialize (55.34 KB allok<6F>ci<63>)</h3>
<table>
<thead>
<tr>
<th>Forr<EFBFBD>s</th>
<th class="number">Becs<EFBFBD>lt m<>ret</th>
<th>Le<EFBFBD>r<EFBFBD>s</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ToArray()</code></td>
<td class="number">~19 KB</td>
<td>V<EFBFBD>gs<EFBFBD> byte[] allok<6F>ci<63> a visszat<61>r<EFBFBD>si <20>rt<72>khez</td>
</tr>
<tr>
<td><code>Dictionary&lt;object,int&gt;</code></td>
<td class="number">~8 KB</td>
<td>Reference scanning: _scanOccurrences, _writtenRefs</td>
</tr>
<tr>
<td><code>HashSet&lt;object&gt;</code></td>
<td class="number">~4 KB</td>
<td>Multi-referenced objektumok nyilv<6C>ntart<72>sa</td>
</tr>
<tr>
<td><code>Dictionary&lt;string,int&gt;</code></td>
<td class="number">~6 KB</td>
<td>Property name table + string interning</td>
</tr>
<tr>
<td><code>List&lt;string&gt;</code></td>
<td class="number">~4 KB</td>
<td>Property nevek <20>s interned stringek list<73>i</td>
</tr>
<tr>
<td>Boxing</td>
<td class="number">~10 KB</td>
<td>Value type boxing a property getter-ekben</td>
</tr>
<tr>
<td>Egy<EFBFBD>b</td>
<td class="number">~4 KB</td>
<td>Closure-ok, delegate-ek, <20>tmeneti objektumok</td>
</tr>
</tbody>
</table>
</div>
<!-- Optimaliz<69>l<EFBFBD>si javaslatok -->
<div class="card">
<h2>?? Tov<6F>bbi Optimaliz<69>l<EFBFBD>si Lehet<65>s<EFBFBD>gek</h2>
<div class="optimization-item high">
<h4>
<span class="impact-badge impact-high">MAGAS HAT<41>S</span>
1. IBufferWriter&lt;byte&gt; alap<61> Serialize
</h4>
<p>
A <code>ToArray()</code> h<>v<EFBFBD>s ~19 KB allok<6F>ci<63>t okoz. Ehelyett <code>IBufferWriter&lt;byte&gt;</code>
interf<72>sz haszn<7A>lat<61>val a h<>v<EFBFBD> biztos<6F>thatja a buffert, elker<65>lve az allok<6F>ci<63>t.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~35% mem<65>ria cs<63>kken<65>s serialize-n<>l</p>
</div>
<div class="optimization-item high">
<h4>
<span class="impact-badge impact-high">MAGAS HAT<41>S</span>
2. Typed Property Getter-ek (Boxing elker<65>l<EFBFBD>se)
</h4>
<p>
A jelenlegi <code>Func&lt;object, object?&gt;</code> getter minden value type-ot boxol.
T<>pusos getter-ek (<code>Func&lt;T, int&gt;</code>, stb.) haszn<7A>lat<61>val megsz<73>ntethet<65>.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~10 KB / serialize (~18% cs<63>kken<65>s)</p>
</div>
<div class="optimization-item medium">
<h4>
<span class="impact-badge impact-medium">K<EFBFBD>ZEPES HAT<41>S</span>
3. Reference Tracking gy<67>jtem<65>nyek pooloz<6F>sa
</h4>
<p>
A <code>Dictionary</code> <20>s <code>HashSet</code> objektumok a context pool-ban maradnak,
de <code>Clear()</code> ut<75>n is megtartj<74>k a kapacit<69>sukat. A poolban t<>rol<6F>s el<65>tt
<20>rdemes lenne <code>TrimExcess()</code> h<>vni, vagy kisebb initial capacity-t haszn<7A>lni.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~5 KB / serialize</p>
</div>
<div class="optimization-item medium">
<h4>
<span class="impact-badge impact-medium">K<EFBFBD>ZEPES HAT<41>S</span>
4. String.Create() UTF8 k<>dol<6F>shoz
</h4>
<p>
A deszerializ<69>l<EFBFBD>sn<73>l a <code>Encoding.UTF8.GetString()</code> <20>j stringet allok<6F>l.
<code>String.Create()</code> span callback-kel k<>zvetlen<65>l a string bufferbe <20>rhat.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~2 KB / deserialize komplex objektumokn<6B>l</p>
</div>
<div class="optimization-item low">
<h4>
<span class="impact-badge impact-low">ALACSONY HAT<41>S</span>
5. Two-pass serialize elker<65>l<EFBFBD>se NoRef m<>dban
</h4>
<p>
NoRef m<>dban is fut a <code>CollectPropertyNames</code> f<>zis a metaadathoz.
Ha a t<>pus ismert <20>s stabil, a property nevek el<65>re cache-elhet<65>k.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~10% sebess<73>g javul<75>s NoRef serialize-n<>l</p>
</div>
<div class="optimization-item low">
<h4>
<span class="impact-badge impact-low">ALACSONY HAT<41>S</span>
6. Span-based enum serialization
</h4>
<p>
A <code>Convert.ToInt32(value)</code> enum <20>rt<72>kekn<6B>l boxing-ot okoz.
T<>pusos enum kezel<65>s vagy <code>Unsafe.As</code> haszn<7A>lat<61>val elker<65>lhet<65>.
</p>
<p><strong>Becs<EFBFBD>lt megtakar<61>t<EFBFBD>s:</strong> ~24 byte / enum <20>rt<72>k</p>
</div>
</div>
<!-- Funkci<63> <20>sszehasonl<6E>t<EFBFBD>s -->
<div class="card">
<h2>?? Funkci<63> <20>sszehasonl<6E>t<EFBFBD>s</h2>
<table>
<thead>
<tr>
<th>Funkci<EFBFBD></th>
<th style="text-align: center;">AcBinary</th>
<th style="text-align: center;">MessagePack</th>
<th>Megjegyz<EFBFBD>s</th>
</tr>
</thead>
<tbody>
<tr>
<td>Reference Handling ($id/$ref)</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">?</td>
<td>K<EFBFBD>z<EFBFBD>s objektumok deduplik<69>l<EFBFBD>sa</td>
</tr>
<tr>
<td>Populate (megl<67>v<EFBFBD> objektum)</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">?</td>
<td>L<EFBFBD>tez<EFBFBD> objektum friss<73>t<EFBFBD>se</td>
</tr>
<tr>
<td>PopulateMerge (IId merge)</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">?</td>
<td>Lista elemek ID alap<61> merge</td>
</tr>
<tr>
<td>Schema Evolution</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">??</td>
<td>Property n<>v alap<61> mapping</td>
</tr>
<tr>
<td>Metadata Table</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">?</td>
<td>Property nevek indexel<65>se</td>
</tr>
<tr>
<td>String Interning</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">?</td>
<td>Ism<EFBFBD>tl<EFBFBD>d<EFBFBD> stringek deduplik<69>l<EFBFBD>sa</td>
</tr>
<tr>
<td>Kompakt m<>ret</td>
<td style="text-align: center;">??</td>
<td style="text-align: center;">?</td>
<td>MsgPack ~40% kisebb</td>
</tr>
<tr>
<td>Serialize sebess<73>g</td>
<td style="text-align: center;">??</td>
<td style="text-align: center;">?</td>
<td>MsgPack 3-4<> gyorsabb</td>
</tr>
<tr>
<td>Deserialize sebess<73>g</td>
<td style="text-align: center;">?</td>
<td style="text-align: center;">??</td>
<td>AcBinary ak<61>r 40<34> gyorsabb</td>
</tr>
</tbody>
</table>
</div>
<!-- Aj<41>nl<6E>sok -->
<div class="card">
<h2>?? Mikor Melyiket Haszn<7A>ld?</h2>
<div class="summary-grid">
<div class="summary-item" style="border-left-color: var(--primary);">
<h4>?? AcBinary aj<61>nlott</h4>
<ul>
<li>Deserialize-heavy workload (kliens oldal)</li>
<li>Populate/Merge sz<73>ks<6B>ges</li>
<li>Reference handling kell (shared objects)</li>
<li>Schema v<>ltoz<6F>sok v<>rhat<61>ak</li>
<li>NoRef m<>d haszn<7A>lhat<61> (40<34> gyorsabb!)</li>
</ul>
</div>
<div class="summary-item" style="border-left-color: #f97316;">
<h4>?? MessagePack aj<61>nlott</h4>
<ul>
<li>Serialize-heavy workload (szerver oldal)</li>
<li>M<EFBFBD>ret kritikus (h<>l<EFBFBD>zati <20>tvitel)</li>
<li>Egyszer<EFBFBD> objektumok (nincs referencia)</li>
<li>K<EFBFBD>ls<EFBFBD> rendszerekkel kompatibilit<69>s</li>
<li>Minim<EFBFBD>lis GC pressure kell</li>
</ul>
</div>
</div>
</div>
<!-- Kiemelt eredm<64>nyek -->
<div class="card">
<h2>?? Kiemelt Eredm<64>nyek</h2>
<div class="stats-grid">
<div class="stat-card success">
<div class="value">40<EFBFBD></div>
<div class="label">AcBinary NoRef Deserialize gyorsabb</div>
</div>
<div class="stat-card success">
<div class="value">9<EFBFBD></div>
<div class="label">Kevesebb mem<65>ria (NoRef Deser.)</div>
</div>
<div class="stat-card warning">
<div class="value">3.7<EFBFBD></div>
<div class="label">MsgPack Serialize gyorsabb</div>
</div>
<div class="stat-card warning">
<div class="value">4.4<EFBFBD></div>
<div class="label">T<EFBFBD>bb mem<65>ria (Serialize WithRef)</div>
</div>
</div>
</div>
<!-- <20>sszegz<67>s -->
<div class="card">
<h2>?? <20>sszegz<67>s</h2>
<div class="note">
<p><strong>AcBinary er<65>ss<73>gei:</strong></p>
<ul style="margin: 0.5rem 0 0.5rem 1.5rem;">
<li>Kiemelked<EFBFBD>en gyors deserializ<69>l<EFBFBD>s, k<>l<EFBFBD>n<EFBFBD>sen NoRef m<>dban (40<34> gyorsabb)</li>
<li>Be<EFBFBD>p<EFBFBD>tett reference handling <20>s populate/merge t<>mogat<61>s</li>
<li>Schema evolution friendly (property n<>v alap<61>)</li>
</ul>
<br>
<p><strong>Fejlesztend<EFBFBD> ter<65>letek:</strong></p>
<ul style="margin: 0.5rem 0 0.5rem 1.5rem;">
<li>Serialize sebess<73>g (3-4<> lassabb MessagePack-n<>l)</li>
<li>Mem<EFBFBD>ria allok<6F>ci<63> serialize-n<>l (4.4<EFBFBD> t<>bb)</li>
<li>Output m<>ret (~68% nagyobb)</li>
</ul>
<br>
<p><strong>Javasolt k<>vetkez<65> l<>p<EFBFBD>sek priorit<69>s szerint:</strong></p>
<ol style="margin: 0.5rem 0 0 1.5rem;">
<li>IBufferWriter&lt;byte&gt; t<>mogat<61>s hozz<7A>ad<61>sa</li>
<li>Typed property getter-ek boxing elker<65>l<EFBFBD>s<EFBFBD>re</li>
<li>Reference tracking collection pooling optimaliz<69>l<EFBFBD>sa</li>
</ol>
</div>
</div>
</div>
<footer>
AcBinary Serializer Benchmark Report | AyCode.Core | 2024
</footer>
</body>
</html>