<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>XLSB pranoksta XLSX on File Format Blog</title>
    <link>https://blog.fileformat.com/lt/tag/xlsb-pranoksta-xlsx/</link>
    <description>Recent content in XLSB pranoksta XLSX on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>lt</language>
    <lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/lt/tag/xlsb-pranoksta-xlsx/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>XLSB vs XLSX dideliems duomenų rinkiniams: programuotojo našumo vadovas</title>
      <link>https://blog.fileformat.com/lt/spreadsheet/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide/</link>
      <pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/lt/spreadsheet/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide/</guid>
      <description>Sužinokite, kodėl XLSB pranoksta XLSX dideliuose duomenų rinkiniuose. Išsamiai nagrinėkite suspaudimo mechaniką, atminties naudojimą, Python/C# našumo matavimus ir kada rinktis binarinį formatą vietoj XML.</description>
      <content:encoded><![CDATA[<p><strong>Paskutinį kartą atnaujinta</strong>: 30 Sep, 2026</p>
<figure class="align-center ">
    <img loading="lazy" src="images/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide.png#center"
         alt="XLSB vs XLSX for Large Data Sets: A Developer’s Performance Guide"/> 
</figure>

<h2 id="xlsb-vs-xlsx-dideliems-duomenų-rinkiniams-programuotojo-našumo-vadovas">XLSB vs XLSX dideliems duomenų rinkiniams: programuotojo našumo vadovas</h2>
<p>Jei kuriate duomenų srautus, backend ataskaitų variklius arba analitikos įrankius, kurie sąveikauja su Microsoft Excel, greičiausiai susidūrėte su „siena“.</p>
<p>Vartotojas įkelia 450 000 eilučių darbaknygę. Jūsų serveris paleidžia darbinį gijas, atminties suvartojimas šokiruojamai išauga iki gigabaitų, šiukšlių surinkimas užšaldo vykdymo laiką, ir jūsų vykdymas baigiasi laiko limitu. Patikrinote duomenų paketą: tai standartinis <code>.xlsx</code> failas.</p>
<p>Norint tai išspręsti, kūrėjai dažnai praleidžia dienas įgyvendindami duomenų skaidymą į dalis, srautinio analizatorių arba perkeldami failus į foninius darbininkus. Vis dėlto viena efektyviausių optimizacijų nereikalauja jokio architektūrinio pertvarkymo: pakeisti failo plėtinį iš <code>.xlsx</code> į <code>.xlsb</code>.</p>
<p>Šiame vadove mes paniriame į abiejų formatų vidų, nagrinėjame, kodėl jų vidinė architektūra sukelia radikaliai skirtingus našumo požymius, lyginame konkrečius našumo matavimus Python ir .NET aplinkose ir pateikiame aiškias taisykles, kada gamyboje naudoti binarines darbaknyges.</p>
<h2 id="1-užkulisiuose-openxml-vs-biff12">1. Užkulisiuose: OpenXML vs. BIFF12</h2>
<p>Norint suprasti, kodėl našumas tokį dramatišką skirtumą rodo dideliuose duomenų rinkiniuose, turime pažvelgti, kaip kiekvienas formatas saugo įrašus diske.</p>
<pre tabindex="0"><code>       ┌────────────────────────┐         ┌────────────────────────┐
       │     sample.xlsx        │         │      sample.xlsb       │
       │ (ZIP Archive Wrapper)  │         │ (ZIP Archive Wrapper)  │
       └───────────┬────────────┘         └───────────┬────────────┘
                   │                                  │
       ┌───────────▼────────────┐         ┌───────────▼────────────┐
       │   sheet1.xml (UTF-8)   │         │    sheet1.bin (BIFF12) │
       │  Verbose ASCII Tags    │         │ Structured Byte Stream │
       │  &lt;c r=&#34;A1&#34;&gt;&lt;v&gt;42&lt;/v&gt;   │         │ [Opcode][Len][Payload] │
       └────────────────────────┘         └────────────────────────┘
</code></pre><p>Abu <code>.xlsx</code> ir <code>.xlsb</code> failai yra suspausti ZIP konteineriai, atitinkantys Open Packaging Conventions (OPC) standartą. Jei pervadinsite bet kurį failą į <code>.zip</code> ir išskleistumėte jį, pamatysite pažįstamą katalogų struktūrą: <code>_rels</code>, <code>docProps</code> ir <code>xl/worksheets/</code>.</p>
<p>Esminis skirtumas slypi <code>xl/worksheets/</code> aplanke:</p>
<ul>
<li><strong>XLSX saugo lapus kaip paprastą XML tekstą (<code>sheet1.xml</code>).</strong></li>
<li><strong>XLSB saugo lapus kaip nuosavus binarinius srautus (<code>sheet1.bin</code>), koduotus naudojant Microsoft BIFF12 (Binary Interchange File Format 12).</strong></li>
</ul>
<h3 id="kaip-xlsx1-koduoja-duomenis-xml-dom-našta">Kaip <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> koduoja duomenis (XML DOM našta)</h3>
<p>XLSX darbalapyje kiekviena ląstelė yra apibrėžta aiškiomis XML žymomis:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;row</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;1&#34;</span> <span style="color:#a6e22e">spans=</span><span style="color:#e6db74">&#34;1:2&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;c</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;A1&#34;</span> <span style="color:#a6e22e">t=</span><span style="color:#e6db74">&#34;s&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;v&gt;</span>142<span style="color:#f92672">&lt;/v&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/c&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;c</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;B1&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;v&gt;</span>98234.55<span style="color:#f92672">&lt;/v&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/c&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/row&gt;</span>
</span></span></code></pre></div><p>Skaitant šią eilutę, jūsų vykdymo aplinka turi:</p>
<ol>
<li>Išskleisti neapdorotą deflate srautą į tekstą.</li>
<li>Skaidyti į tokenus ir analizuoti simbolių eilutes į XML DOM arba SAX įvykių srautą.</li>
<li>Patikrinkite atidarymo ir uždarymo žymas (<code>&lt;c&gt;</code>, <code>&lt;/c&gt;</code>, <code>&lt;v&gt;</code>, <code>&lt;/v&gt;</code>).</li>
<li>Išspręskite teksto paieškas iš atskiros <code>sharedStrings.xml</code> lentelės.</li>
<li>Išanalizuokite ASCII tekstą <code>&quot;98234.55&quot;</code> į IEEE 754 64‑bitų slankaus kablelio skaičių.</li>
</ol>
<p>Kiekviena atskira ląstelė sukelia procesoriaus (CPU) išteklių sąnaudas dėl teksto analizės, teksto paskirstymo ir leksikos analizės. Padauginus tai iš 500 000 eilučių ir 30 stulpelių (15 milijonų ląstelių), procesorius praleidžia žymiai daugiau ciklų sintaksės analizei nei domeno verčių apdorojimui.</p>
<h3 id="kaip-xlsb3-koduoja-duomenis-biff12-binarinis-srautas">Kaip <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> koduoja duomenis (BIFF12 binarinis srautas)</h3>
<p>BIFF12 visiškai atsisako teksto serializacijos. Vietoj teksto žymėjimo duomenys išdėlioti kaip nuoseklus kintamo ilgio dvejetainių įrašų sekos:</p>
<pre tabindex="0"><code>[Record Type: 2 bytes] [Record Length: 4 bytes] [Payload: N bytes]
</code></pre><p>Slankaus kablelio ląstelė BIFF12 nenaudoja teksto atvaizdų, tokių kaip <code>&quot;98234.55&quot;</code>. Ji yra atvaizduojama tiesiogiai:</p>
<ul>
<li>2 baitai įrašo ID (pvz., <code>BrtCellRk</code> arba <code>BrtCellReal</code>)</li>
<li>4 baitai stulpelio/eilutės indeksams</li>
<li>8 baitų, turinčių neapdorotą, IEEE 754 dvigubo tikslumo baitų struktūrą</li>
</ul>
<p>Kai jūsų analizatorius skaito XLSB failą, jis visiškai apeina leksikinį analizavimą. Jis perskaito įrašo antraštę, paima 8 neapdorotus baitus iš buferio, tiesiogiai kopijuoja juos į atmintį ir perkelia rodyklę į priekį. Nėra žymių, kurias reikėtų patikrinti, nėra eilutės‑į‑skaičių tipų konversijų ir nulio UTF‑8 dekodavimo našta skaitiniams duomenims.</p>
<h2 id="2-kiekybiniai-etalonai-diskas-atmintis-ir-pralaidumas">2. Kiekybiniai etalonai: Diskas, Atmintis ir Pralaidumas</h2>
<p>Norint pavaizduoti realaus pasaulio poveikį, apsvarstykite simuliuotą duomenų rinkinį, kuriame yra <strong>750 000 eilučių ir 25 stulpeliai</strong> (mišinys laiko žymių, slankaus kablelio skaičių, sveikųjų skaičių ir kategorijų kodų).</p>
<p>Žemiau pateikti testai vertina identiškus lentelinius duomenis, išsaugotus tiek XLSX, tiek XLSB formatu.</p>
<h3 id="testavimo-aplinka">Testavimo aplinka</h3>
<ul>
<li><strong>CPU:</strong> AMD Ryzen 9 5900X (12 branduolių, 24 gijų)</li>
<li><strong>RAM:</strong> 64 GB DDR4‑3600</li>
<li><strong>Saugojimas:</strong> PCIe 4.0 NVMe SSD</li>
<li><strong>Vykdymo laikas:</strong> Python 3.11 (<code>openpyxl</code>, <code>pyxlsb</code>, <code>calamine</code>) &amp; .NET 8 (<code>ExcelDataReader</code>, <code>ClosedXML</code>)</li>
</ul>
<h3 id="pagrindiniai-našumo-rodikliai">Pagrindiniai našumo rodikliai</h3>
<table>
<thead>
<tr>
<th style="text-align:left">Metrika</th>
<th style="text-align:left"><a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> (OpenXML)</th>
<th style="text-align:left"><a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> (BIFF12)</th>
<th style="text-align:left">Delta / Patobulinimas</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>Failo dydis diske</strong></td>
<td style="text-align:left">128.4 MB</td>
<td style="text-align:left">68.2 MB</td>
<td style="text-align:left"><strong>~47% mažesnis</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Išsaugojimo / Serializacijos laikas</strong></td>
<td style="text-align:left">42.6 s</td>
<td style="text-align:left">14.1 s</td>
<td style="text-align:left"><strong>3.0x greitesnis</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Skaitymo laikas (Python DOM parser)</strong></td>
<td style="text-align:left">38.2 s</td>
<td style="text-align:left">8.9 s</td>
<td style="text-align:left"><strong>4.3x greitesnis</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Skaitymo laikas (Rust/C variklis)</strong></td>
<td style="text-align:left">6.4 s</td>
<td style="text-align:left">1.9 s</td>
<td style="text-align:left"><strong>3.3x greičiau</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Didžiausia krūvos paskirstymo per skaitymą</strong></td>
<td style="text-align:left">~1.85 GB</td>
<td style="text-align:left">~510 MB</td>
<td style="text-align:left"><strong>~72% sumažėjimas</strong></td>
</tr>
</tbody>
</table>
<h3 id="kodėl-xlsb-failai-yra-mažesni">Kodėl XLSB failai yra mažesni</h3>
<p>Nors abu formatai naudoja standartinį ZIP suspaudimą, binariniai srautai suspaudžia žymiai efektyviau nei išplėstinis XML tekstas:</p>
<ol>
<li><strong>Pasikartojanti sintaksė pašalinama:</strong> XML turi pasikartojančias žymas (<code>&lt;c r=&quot;AA1&quot; s=&quot;1&quot;&gt;</code>) kiekviename įraše. Nors ZIP suspaudimas sumažina pakartotinius simbolius, nesuspaustas duomenų srautas yra milžiniškas.</li>
<li><strong>Skaitinė tankis:</strong> XML faile skaičius <code>12345678.9012</code> reikalauja 14 baitų ASCII teksto. BIFF12 formate jis saugomas kaip 8 baitų dvigubas skaičius (arba suspaudžiamas į 4 baitų <code>RK</code> įrašą, jei atitinka specifines tikslumo taisykles).</li>
</ol>
<h2 id="3-atminties-pėdsakas-ir-šiukšlių-surinkimo-spaudimas">3. Atminties pėdsakas ir šiukšlių surinkimo spaudimas</h2>
<p>Web paslaugoms ir mikroservisams, apdorojantiems lygiagrečius užklausimus, procesoriaus greitis yra tik pusė kovos; <strong>atminties pėdsakas</strong> yra tas, kur programos iš tikrųjų žlunga.</p>
<pre tabindex="0"><code>XLSX Parsing Heap Profile:
[ String Buffer ] -&gt; [ Tokenizer ] -&gt; [ XML DOM Nodes ] -&gt; [ Object Boxing ]
▲ Massive Gen 0/1 heap allocation -&gt; Triggers aggressive Garbage Collection

XLSB Parsing Heap Profile:
[ Byte Buffer ] -&gt; [ Fixed Struct Copy ] -&gt; [ Destination Array ]
▲ Minimal allocations -&gt; Low GC overhead
</code></pre><p>Kai XML analizatorius apdoroja 100 MB XLSX failą, jis turi sukurti tūkstančius laikinų eilutės tokenų, eilutės skilties buferius ir žodyno paieškas. Šiukšlių surinkimo kalbose (Java, C#, Go, Node.js, Python) tai sukelia ekstremalią krūvos fragmentaciją ir verčia vykdymo aplinką dažnai sustoti dėl Šiukšlių surinkimo (GC) pauzių.</p>
<p>Kadangi XLSB analizė veikia tiesiogiai su fiksuoto pločio baitų skiltimis, analizatoriai gali skaityti duomenis į steko paskirstytas struktūras arba pakartotinai naudojamus baitų buferius. Rezultatas – žymiai sumažėjęs atminties pėdsakas ir nulinis vykdymo laiko alokatoriaus trankavimas.</p>
<h2 id="4-kūrėjo-įgyvendinimo-pavyzdžiai">4. Kūrėjo įgyvendinimo pavyzdžiai</h2>
<p>Pažvelkime, kaip išnaudoti XLSB įprastose kūrėjų įrankių grandinėse.</p>
<h3 id="python-perkėlimas-iš-openpyxl-į-calamine--pyxlsb">Python: Perkėlimas iš OpenPyXL į Calamine / PyXLSB</h3>
<p>Standartinis <code>pandas.read_excel('data.xlsx')</code> pagal nutylėjimą naudoja <code>openpyxl</code>, kuris sukuria didelį atminties medį.</p>
<p>Norint apdoroti didelius XLSB failus maksimaliai greitai, naudokite Rust varomą <code>calamine</code> variklį (prieinamą per <code>python-calamine</code> ir integruotą į modernų Pandas):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> pandas <span style="color:#66d9ef">as</span> pd
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> time
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>filename_xlsx <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;large_dataset.xlsx&#34;</span>
</span></span><span style="display:flex;"><span>filename_xlsb <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;large_dataset.xlsb&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Reading standard XLSX (uses openpyxl by default)</span>
</span></span><span style="display:flex;"><span>t0 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>df_xlsx <span style="color:#f92672">=</span> pd<span style="color:#f92672">.</span>read_excel(filename_xlsx, engine<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;openpyxl&#34;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;XLSX loaded in </span><span style="color:#e6db74">{</span>time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t0<span style="color:#e6db74">:</span><span style="color:#e6db74">.2f</span><span style="color:#e6db74">}</span><span style="color:#e6db74">s&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Reading XLSB with Calamine (Rust engine)</span>
</span></span><span style="display:flex;"><span>t0 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>df_xlsb <span style="color:#f92672">=</span> pd<span style="color:#f92672">.</span>read_excel(filename_xlsb, engine<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;calamine&#34;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;XLSB loaded in </span><span style="color:#e6db74">{</span>time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t0<span style="color:#e6db74">:</span><span style="color:#e6db74">.2f</span><span style="color:#e6db74">}</span><span style="color:#e6db74">s&#34;</span>)
</span></span></code></pre></div><p>Jei iteruojate per milžiniškus duomenų rinkinius eilutė po eilutės neįkeliant visos matricos į DataFrame, <code>pyxlsb</code> suteikia lengvą srautinį iteratorių:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pyxlsb <span style="color:#f92672">import</span> open_workbook
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>total_sum <span style="color:#f92672">=</span> <span style="color:#ae81ff">0.0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open_workbook(<span style="color:#e6db74">&#34;massive_export.xlsb&#34;</span>) <span style="color:#66d9ef">as</span> wb:
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> wb<span style="color:#f92672">.</span>get_sheet(<span style="color:#ae81ff">1</span>) <span style="color:#66d9ef">as</span> sheet:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> row <span style="color:#f92672">in</span> sheet:
</span></span><span style="display:flex;"><span>            <span style="color:#75715e"># Cell 0 contains an RK integer or Double float</span>
</span></span><span style="display:flex;"><span>            val <span style="color:#f92672">=</span> row[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">.</span>v
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> val <span style="color:#f92672">is</span> <span style="color:#f92672">not</span> <span style="color:#66d9ef">None</span>:
</span></span><span style="display:flex;"><span>                total_sum <span style="color:#f92672">+=</span> val
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Aggregated Total: </span><span style="color:#e6db74">{</span>total_sum<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><h3 id="c--net-aukštos-našumo-srauto-įsisavinimas">C# / .NET: Aukštos našumo srauto įsisavinimas</h3>
<p>.NET aplinkoje bibliotekos kaip <code>ClosedXML</code> ar <code>EPPlus</code> puikiai tinka standartiniam generavimui, tačiau norint įkelti didelius failus be atminties išsekimo, <code>ExcelDataReader</code> su XLSB palaikymu yra nepaprastai greitas:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System.IO;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> ExcelDataReader;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">XlsbProcessor</span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> ProcessBinarySheet(<span style="color:#66d9ef">string</span> filePath)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// ExcelDataReader automatically identifies BIFF12 from file headers</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> var reader = ExcelReaderFactory.CreateReader(stream);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">long</span> rowCount = <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">double</span> aggregateValue = <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">while</span> (reader.Read())
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            rowCount++;
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Read column directly without boxing overhead where possible</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (!reader.IsDBNull(<span style="color:#ae81ff">0</span>))
</span></span><span style="display:flex;"><span>            {
</span></span><span style="display:flex;"><span>                aggregateValue += reader.GetDouble(<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        Console.WriteLine(<span style="color:#e6db74">$&#34;Processed {rowCount:N0} rows. Sum: {aggregateValue:F2}&#34;</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="5-architektūriniai-kompromisai-kada-nenaudoti-xlsb">5. Architektūriniai kompromisai: Kada NENAUDOTI XLSB</h2>
<p>Nors XLSB turi nepaprastai didelį našumo pranašumą, tai nėra stebuklingas sprendimas. Prieš įgyvendindami jį visoje savo sistemoje, turėtumėte apsvarstyti kelis operacinius kompromisus:</p>
<pre tabindex="0"><code>                      DECISION MATRIX
                      
               Is file size &gt; 50MB OR 
               rows &gt; 100,000?
                    │
         ┌──────────┴──────────┐
        YES                    NO
         │                     │
   Do third-party        Use standard XLSX
   tools strictly        (Maximum compatibility)
   require OpenXML?
         │
    ┌────┴────┐
   YES        NO
    │         │
Use XLSX   Use XLSB
(Stream)   (Max speed &amp; efficiency)
</code></pre><h3 id="1-ekosistema-ir-bibliotekų-palaikymas">1. Ekosistema ir bibliotekų palaikymas</h3>
<ul>
<li><strong>XLSX:</strong> Universalus. Iš esmės kiekviena kalba, biblioteka, SaaS įrankis (Google Sheets, Airtable, Tableau) ir internetinis parseris natūraliai palaiko OpenXML.</li>
<li><strong>XLSB:</strong> Mažiau paplitęs. Nors Excel, LibreOffice ir išsivysčiusios kūrėjų bibliotekos (<code>ExcelDataReader</code>, <code>pyxlsb</code>, <code>calamine</code>, <code>Aspose</code>) jį palaiko, daugelis lengvų paketų arba grynai internetinių JavaScript parserių (pvz., senesnės <code>SheetJS</code> versijos) turi ribotą arba tik skaitymo palaikymą.</li>
</ul>
<h3 id="2-git-ir-versijų-kontrolės-skirtumų-analizė">2. Git ir versijų kontrolės skirtumų analizė</h3>
<ul>
<li><strong>XLSX:</strong> Kadangi jis turi tekstinį XML ZIP konteineryje, komandų eilutės įrankiai ir Git kabliukai gali išarchyvuoti ir formatuoti XML, kad sukurtų skaitomus struktūrinius skirtumus tarp įsipareigojimų.</li>
<li><strong>XLSB:</strong> Gryni binariniai duomenys. Versijų kontrolės sistemos traktuoja jį griežtai kaip nepermatomą binarinį objektą, pašalindamos bet kokią galimybę atlikti smulkius skirtumus ar eilučių lygio sujungimus.</li>
</ul>
<h3 id="3-žiniatinklio-kliento-atvaizdavimas">3. Žiniatinklio kliento atvaizdavimas</h3>
<p>Jei jūsų architektūra remiasi skaičiuoklių atvaizdavimu tiesiogiai naršyklėje per WebAssembly arba kliento pusės JavaScript, XLSX parseriai yra žymiai brandesni ir mažiau linkę į kraštutinės situacijos atvaizdavimo klaidas nei kliento pusės binariniai parseriai.</p>
<h3 id="4-trečiųjų-šalių-įsisavinimo-kanalai">4. Trečiųjų šalių įsisavinimo kanalai</h3>
<p>Jei eksportuojate failus išoriniams įmonės klientams, daugelis griežtų įmonės saugumo politikų žymi <code>.xlsb</code> failus. Kadangi BIFF12 failai gali saugoti VBA makrokomandas identiškai kaip <code>.xlsm</code> failai (be būtinybės naudoti atskirą plėtinį), kai kurie el. pašto filtrai ir ugniasienės skeneriai karantinuoja <code>.xlsb</code> įkėlimus kaip galimas makrokomandas turinčias grėsmes.</p>
<h2 id="6-santrauka-ir-palyginimas-kuri-formatas-laimi">6. Santrauka ir palyginimas: Kuri formatas laimi?</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Savybė</th>
<th style="text-align:left">XLSX</th>
<th style="text-align:left">XLSB</th>
<th style="text-align:left">Laimėtojas</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>Skaitymo / Analizės greitis</strong></td>
<td style="text-align:left">Vidutinis iki prasto</td>
<td style="text-align:left">Labai greitas</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Rašymo / Generavimo greitis</strong></td>
<td style="text-align:left">CPU intensyvus</td>
<td style="text-align:left">Greita</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Failų suspaudimas</strong></td>
<td style="text-align:left">Geras</td>
<td style="text-align:left">Puiku (~40-50% mažiau)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Atminties paskirstymas</strong></td>
<td style="text-align:left">Aukštas (Didelis GC spaudimas)</td>
<td style="text-align:left">Žemas (Tiesioginis baitų skaitymas)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Įrankių tarpusavio suderinamumas</strong></td>
<td style="text-align:left">Universalus</td>
<td style="text-align:left">Aukštas, bet selektyvus</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Saugumo skenavimo trintis</strong></td>
<td style="text-align:left">Minimalus</td>
<td style="text-align:left">Retkarčiais klaidingi teigiami rezultatai</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Makro galimybės</strong></td>
<td style="text-align:left">Ne (<code>.xlsm</code> reikalingas)</td>
<td style="text-align:left">Taip (Palaiko makrokomandas natūraliai)</td>
<td style="text-align:left"><strong>Ryšys</strong></td>
</tr>
</tbody>
</table>
<h2 id="7-kūrėjo-nuomonė">7. Kūrėjo nuomonė</h2>
<p>Naudokite <strong>XLSX</strong>, kai:</p>
<ul>
<li>Failai yra nedidelio arba vidutinio dydžio (&lt; 50 000 eilučių).</li>
<li>Jūsų failus turi apdoroti trečiųjų šalių SaaS platformos arba vartotojų programos (pvz., Google Sheets).</li>
<li>Negalite kontroliuoti galutinio kliento, skaitančio failą, aplinkos.</li>
</ul>
<p>Perjunkite į <strong>XLSB</strong>, kai:</p>
<ul>
<li>Kuriate vidinius duomenų srautus, paketinius darbus, ETL sistemas arba darbo užduotis, kurios apdoroja didelius duomenų ištraukas (&gt; 100 000 eilučių).</li>
<li>Jūsų serveriai susiduria su atminties trūkumo (OOM) klaidomis, kai vykdoma skaičialapio serializacija arba deserializacija.</li>
<li>Jums reikia sumažinti S3/bloško saugojimo pėdsakus ir tinklo perdavimo laiką dideliems periodiškiems finansiniams modeliams arba duomenų eksporto procesams.</li>
</ul>
<p>Perėjimas prie XLSB dažnai yra toks paprastas, kaip pakeisti konfigūracijos eilutę jūsų eksporto tarnyboje, tačiau jis suteikia 3‑5 kartų didesnį pralaidumo padidėjimą, kuris paprastai reikalauja savaičių kodo optimizavimo.</p>
<h2 id="dažnai-užduodami-klausimai-duk">Dažnai užduodami klausimai (DUK)</h2>
<p>**Q1: Ar <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> failas palaiko tą patį eilučių ir stulpelių limitą kaip <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> failas?
Taip; tiek XLSB, tiek XLSX turi tą patį tinklelio maksimumą – 1 048 576 eilučių ir 16 384 stulpelių viename darbalapyje.</p>
<p>**Q2: Ar XLSB failas gali saugiai saugoti VBA makrokomandas nekeisdamas failo plėtimo?
Taip, skirtingai nuo XLSX (kuris reikalauja išsaugoti kaip XLSM, kad būtų vykdomas kodas), XLSB natūraliai palaiko dvejetainį VBA makrokomandų saugojimą tame pačiame <code>.xlsb</code> failo formate.</p>
<p>**Q3: Kodėl išsaugant failą kaip XLSB sumažėja jo dydis, jei abu formatai jau yra suspausti ZIP archyvu?
XLSB pašalina išsamias teksto žymėjimo žymas ir koduoja langelių pozicijas, įrašus bei neapdorotas skaitines reikšmes į glaustus dvejetainių baitų srautus, kurie suspaudžiami žymiai tankiau nei paprasti XML eilutės.</p>
<p>**Q4: Ar „Google Sheets“ gali tiesiogiai importuoti ir redaguoti XLSB failus?
Ne; „Google Sheets“ negali natūraliai atverti ar konvertuoti <code>.xlsb</code> failų tiesiogiai, todėl reikia juos konvertuoti į <code>.xlsx</code> arba CSV prieš importuojant.</p>
<p>**Q5: Ar XLSB failai yra labiau linkę į duomenų sugadinimą nei XLSX failai?
Nors XML failus kartais galima rankiniu būdu peržiūrėti ar pataisyti teksto redaktoriumi, kai jie yra dalinai sugadinti, binariniai BIFF12 srautai reikalauja griežtų baitų poslinkių ir juos sunku atkurti rankiniu būdu, jei struktūriniai sektoriai yra pažeisti.</p>
<h2 id="taip-pat-žiūrėkite">Taip pat žiūrėkite</h2>
<ul>
<li><a href="https://blog.fileformat.com/en/spreadsheet/csv-vs-xlsx-vs-ods-in-2026-best-spreadsheet-format-for-developers/">CSV vs XLSX vs ODS 2026 m.: Geriausias skaičiuoklių formatas kūrėjams</a></li>
<li><a href="https://blog.fileformat.com/en/spreadsheet/xls-vs-xlsx-vs-xlsm-vs-xlsb-choosing-the-right-spreadsheet-format/">XLS vs XLSX vs XLSM vs XLSB – Tinkamo skaičiuoklių formato pasirinkimas</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/what-is-excel/">Kas yra Excel? Svarbiausia informacija, kurią turite žinoti</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/excel-file-extensions-xlsx-xlsm-xls-xltx-xltm/">Excel failų formatai: XLSX, XLSM, XLS, XLTX, XLTM</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/xls-vs-xlsx/">Skirtumas tarp XLS ir XLSX</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
