<?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 נגד XLSX on File Format Blog</title>
    <link>https://blog.fileformat.com/he/tag/xlsb-%D7%A0%D7%92%D7%93-xlsx/</link>
    <description>Recent content in XLSB נגד XLSX on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>he</language>
    <lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/he/tag/xlsb-%D7%A0%D7%92%D7%93-xlsx/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>XLSB נגד XLSX עבור מערכי נתונים גדולים: מדריך ביצועים למפתחים</title>
      <link>https://blog.fileformat.com/he/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/he/spreadsheet/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide/</guid>
      <description>גלה מדוע XLSB מצטיין על פני XLSX עבור מערכי נתונים גדולים. חקור את מנגנוני הדחיסה, שימוש בזיכרון, מדדי ביצועים ב-Python/C#, ומתי לבחור בינארי על פני XML.</description>
      <content:encoded><![CDATA[<p><strong>עודכן לאחרונה</strong>: 30 ספטמבר, 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-נגד-xlsx-עבור-מערכי-נתונים-גדולים-מדריך-ביצועים-למפתחים">XLSB נגד XLSX עבור מערכי נתונים גדולים: מדריך ביצועים למפתחים</h2>
<p>אם אתה בונה צינורות נתונים, מנועי דיווח בגיבוי, או כלי אנליטיקה שמתחברים ל-Microsoft Excel, סביר להניח שנתקלת ב&quot;הקיר&quot;.</p>
<p>משתמש מעלה חוברת עבודה של 450,000 שורות. השרת שלך מפעיל חוטי עבודה, צריכת הזיכרון מתפוצצת לגיגבייטים, איסוף הזבל מקפיא את זמן הריצה, והביצוע שלך מתפוגג. אתה בודק את המידע: זהו קובץ <code>.xlsx</code> סטנדרטי.</p>
<p>כדי לפתור זאת, מפתחים מבלים לעיתים ימים ביישום חיתוך, מפענחים זורמים, או בהעברת קבצים לעובדים ברקע. עם זאת, אחת האופטימיזציות היעילות ביותר דורשת אפס שינוי ארכיטקטוני: שינוי סיומת הקובץ מ-<code>.xlsx</code> ל-<code>.xlsb</code>.</p>
<p>במדריך זה, אנו חודרים מתחת למכסה של שני הפורמטים, בודקים מדוע הארכיטקטורות הפנימיות שלהם מייצרות מאפייני ביצועים שונים באופן רדיקלי, משווים מדדי ביצוע קונקרטיים בין Python ל-.NET, ומציגים כללים ברורים מתי לפרוס חוברות עבודה בינריות בייצור.</p>
<h2 id="1-מתחת-למכסה-openxml-נגד-biff12">1. מתחת למכסה: OpenXML נגד BIFF12</h2>
<p>כדי להבין מדוע הביצועים מתפצלים בצורה כה דרמטית על מערכי נתונים גדולים, עלינו לבחון כיצד כל פורמט מאחסן רשומות על הדיסק.</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>קבצי <code>.xlsx</code> ו-<code>.xlsb</code> הם מכולות ZIP דחוסות המתאימות לתקני Open Packaging Conventions (OPC). אם תשנה את שם הקובץ ל-<code>.zip</code> ותוציא אותו, תראה מבנה תיקיות מוכר: <code>_rels</code>, <code>docProps</code>, ו-<code>xl/worksheets/</code>.</p>
<p>ההבדל הקריטי נמצא בתוך התיקייה <code>xl/worksheets/</code>:</p>
<ul>
<li><strong>XLSX מאחסן גיליונות כטקסט XML פשוט (<code>sheet1.xml</code>).</strong></li>
<li><strong>XLSB מאחסן גיליונות כזרמי בינאריים קנייניים (<code>sheet1.bin</code>), מקודד באמצעות BIFF12 של מיקרוסופט (Binary Interchange File Format 12).</strong></li>
</ul>
<h3 id="כיצד-xlsx1-מקודד-נתונים-עומס-xml-dom">כיצד <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> מקודד נתונים (עומס XML DOM)</h3>
<p>בגיליון XLSX, כל תא מוגדר עם תגיות XML מפורשות:</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>כאשר קוראים שורה זו, סביבת הריצה שלך חייבת:</p>
<ol>
<li>לפרוס את זרם ה‑deflate הגולמי לטקסט.</li>
<li>לפרק למילים ולנתח תווי מחרוזת לתוך DOM של XML או זרם אירועי SAX.</li>
<li>אמת את תגיות הפתיחה והסגירה (<code>&lt;c&gt;</code>, <code>&lt;/c&gt;</code>, <code>&lt;v&gt;</code>, <code>&lt;/v&gt;</code>).</li>
<li>פתור חיפושי מחרוזות מטבלה נפרדת <code>sharedStrings.xml</code>.</li>
<li>פענח את הטקסט ASCII <code>&quot;98234.55&quot;</code> למספר נקודה צפה IEEE 754 של 64‑ביט.</li>
</ol>
<p>כל תא בודד גורם לעומס CPU עבור ניתוח מחרוזות, הקצאת מחרוזות וניתוח לקסיקלי. הכפל זאת על פני 500,000 שורות ו‑30 עמודות (15 מיליון תאים), וה‑CPU מבזבז מחזורים רבים יותר בניתוח תחביר מאשר בעיבוד ערכי התחום.</p>
<h3 id="כיצד-xlsb3-מקודד-נתונים-זרם-בינארי-biff12">כיצד <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> מקודד נתונים (זרם בינארי BIFF12)</h3>
<p>BIFF12 מוותר על סריאליזציית טקסט לחלוטין. במקום סימון מחרוזות, הנתונים מסודרים כרצף רציף של רשומות בינריות באורך משתנה:</p>
<pre tabindex="0"><code>[Record Type: 2 bytes] [Record Length: 4 bytes] [Payload: N bytes]
</code></pre><p>תא נקודה צפה ב‑BIFF12 אינו משתמש בייצוגי מחרוזת כמו <code>&quot;98234.55&quot;</code>. הוא מיוצג ישירות:</p>
<ul>
<li>2 בתים למזהה הרשומה (למשל, <code>BrtCellRk</code> או <code>BrtCellReal</code>)</li>
<li>4 בתים לאינדקסי עמודה/שורה</li>
<li>8 בתים המכילים את המבנה הגולמי של IEEE 754 ברמת דיוק כפול</li>
</ul>
<p>כאשר המפענח שלך קורא קובץ XLSB, הוא מדלג לחלוטין על ניתוח לקסיקלי. הוא קורא את כותרת הרשומה, תופס את 8 הבתים הגולמיים מהמאגר, מעתיק אותם ישירות לזיכרון, ומזיז את הסמן קדימה. אין תגים לאימות, אין המרות מסוג מחרוזת למספר, ואין עלות פענוח UTF-8 עבור נתונים מספריים.</p>
<h2 id="2-מדדי-כמותיים-דיסק-זיכרון-וקצב-העברה">2. מדדי כמותיים: דיסק, זיכרון וקצב העברה</h2>
<p>כדי להמחיש את ההשפעה בעולם האמיתי, שקול ערכת נתונים מדומה המכילה <strong>750,000 שורות ו‑25 עמודות</strong> (תערובת של חותמות זמן, מספרים בנקודה צפה, שלמים וקודי קטגוריה).</p>
<p>הבדיקות למטה מעריכות נתונים טבלאיים זהים שנשמרו גם כ‑XLSX וגם כ‑XLSB.</p>
<h3 id="סביבת-בדיקה">סביבת בדיקה</h3>
<ul>
<li><strong>CPU:</strong> AMD Ryzen 9 5900X (12 ליבות, 24 חוטים)</li>
<li><strong>RAM:</strong> 64 ג״ב DDR4-3600</li>
<li><strong>אחסון:</strong> PCIe 4.0 NVMe SSD</li>
<li><strong>זמן ריצה:</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="מדדי-ביצועים-מרכזיים">מדדי ביצועים מרכזיים</h3>
<table>
<thead>
<tr>
<th style="text-align:left">מדד</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">שינוי / שיפור</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>גודל הקובץ על הדיסק</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% קטן יותר</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>שמירה / זמן סריאליזציה</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 מהיר יותר</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>זמן קריאה (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 מהיר יותר</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>זמן קריאה (מנוע Rust/C)</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</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>הקצאת ערמת שיא במהלך קריאה</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% הפחתה</strong></td>
</tr>
</tbody>
</table>
<h3 id="מדוע-קבצי-xlsb-קטנים-יותר">מדוע קבצי XLSB קטנים יותר</h3>
<p>בעוד ששני הפורמטים משתמשים בדחיסת ZIP סטנדרטית, זרמי בינאריים דוחסים בצורה יעילה הרבה יותר מטקסט XML נפוח:</p>
<ol>
<li><strong>הסינטקס המיותר מוסר:</strong> XML מכיל תגיות חוזרות (<code>&lt;c r=&quot;AA1&quot; s=&quot;1&quot;&gt;</code>) בכל רשומה בודדת. בעוד דחיסת ZIP מפחיתה מחרוזות חוזרות, זרם הנתונים הלא דחוס הוא עצום.</li>
<li><strong>צפיפות מספרית:</strong> ב-XML, המספר <code>12345678.9012</code> דורש 14 בתים של טקסט ASCII. ב-BIFF12, הוא מאוחסן כ-double של 8 בתים (או ארוז ברשומת <code>RK</code> של 4 בתים אם הוא מתאים לכללי דיוק ספציפיים).</li>
</ol>
<h2 id="3-טביעת-רגל-בזיכרון-ולחץ-איסוף-זבל">3. טביעת רגל בזיכרון ולחץ איסוף זבל</h2>
<p>בשירותי אינטרנט ומיקרו‑שירותים המטפלים בבקשות מקבילות, מהירות ה‑CPU היא רק חצי מהקרב; <strong>טביעת הזיכרון</strong> היא המקום שבו היישומים נכשלים בפועל.</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>כאשר מפענח XML מעבד קובץ XLSX בגודל 100 מ&quot;ב, הוא חייב ליצור אלפי אסימוני מחרוזת זמניים, חוצצי מחרוזת ובדיקות מילון. בשפות עם איסוף זבל (Java, C#, Go, Node.js, Python), זה יוצר פיצול ערימה קיצוני ודוחף את זמן הריצה להפסקות איסוף זבל (GC) תכופות.</p>
<p>מכיוון שהניתוח של XLSB פועל ישירות על פרוסות בתים ברוחב קבוע, המפרשים יכולים לקרוא נתונים למבנים המוקצים למחסנית או למאגרי בתים ניתנים לשימוש חוזר. התוצאה היא footprint זיכרון מצומצם באופן דרמטי ואפס תזוזות של מחלק הזיכרון בזמן ריצה.</p>
<h2 id="4-דוגמאות-מימוש-למפתחים">4. דוגמאות מימוש למפתחים</h2>
<p>בואו נבחן כיצד לנצל את XLSB בשרשראות כלי פיתוח נפוצות.</p>
<h3 id="python-מעבר-מ-openpyxl-ל-calamine--pyxlsb">Python: מעבר מ-OpenPyXL ל-Calamine / PyXLSB</h3>
<p>הפונקציה הסטנדרטית <code>pandas.read_excel('data.xlsx')</code> משתמשת בברירת מחדל של <code>openpyxl</code>, אשר בונה עץ כבד בזיכרון.</p>
<p>כדי לעבד קבצי XLSB גדולים במהירות מרבית, השתמשו במנוע <code>calamine</code> המונע על ידי Rust (זמין דרך <code>python-calamine</code> ומשולב בפנדס מודרני):</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>אם אתם עוברים על מערכי נתונים ענקיים שורה אחרי שורה מבלי לטעון את כל המטריצה ל‑DataFrame, <code>pyxlsb</code> מספק איטרטור זרימה קל משקל:</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-קלט-זרם-בעל-ביצועים-גבוהים">C# / .NET: קלט זרם בעל ביצועים גבוהים</h3>
<p>ב‑.NET, ספריות כמו <code>ClosedXML</code> או <code>EPPlus</code> מצוינות ליצירה סטנדרטית, אך לצריכת קבצים גדולים ללא תצרוכת זיכרון, <code>ExcelDataReader</code> עם תמיכה ב‑XLSB הוא מהיר במיוחד:</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-פשרות-ארכיטקטוניות-מתי-לא-להשתמש-בxlsb">5. פשרות ארכיטקטוניות: מתי לא להשתמש ב‑XLSB</h2>
<p>למרות יתרונות הביצועים המשמעותיים שלו, XLSB אינו פתרון קסם. עליכם לשקול מספר פשרות תפעוליות לפני שמיישמים אותו ברחבי המערכת שלכם:</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-תמיכה-במערכת-האקולוגית-ובספריות">1. תמיכה במערכת האקולוגית ובספריות</h3>
<ul>
<li><strong>XLSX:</strong> אוניברסלי. כמעט כל שפה, ספרייה, כלי SaaS (Google Sheets, Airtable, Tableau), ופרסר אינטרנט תומכים ב‑OpenXML באופן טבעי.</li>
<li><strong>XLSB:</strong> פחות נפוץ. בעוד Excel, LibreOffice וספריות מפתחים מתקדמות (<code>ExcelDataReader</code>, <code>pyxlsb</code>, <code>calamine</code>, <code>Aspose</code>) תומכות בו, חבילות קלות משקל רבות או פרסרים מבוססי JavaScript אינטרנטיים טהורים (כמו גרסאות ישנות של <code>SheetJS</code>) מציעים תמיכה מוגבלת או רק קריאה.</li>
</ul>
<h3 id="2-השוואת-שינויים-בgit-ובמערכת-בקרת-גרסאות">2. השוואת שינויים ב‑Git ובמערכת בקרת גרסאות</h3>
<ul>
<li><strong>XLSX:</strong> מכיוון שהוא מכיל XML טקסטואלי בתוך מכולת ZIP, כלי שורת פקודה והוקי Git יכולים לחלץ ולפרמט את ה‑XML כדי ליצור הבדלים מבניים קריאים בין קומיטים.</li>
<li><strong>XLSB:</strong> נתונים בינריים טהורים. מערכות בקרת גרסאות מתייחסות אליו כאל בלוב בינרי אטום, מה שמבטל כל אפשרות להבדלים גרגריים או מיזוגים ברמת שורה.</li>
</ul>
<h3 id="3-רינדור-צד-לקוח-באינטרנט">3. רינדור צד לקוח באינטרנט</h3>
<p>אם הארכיטקטורה שלך מתבססת על רינדור גיליונות אלקטרוניים ישירות בדפדפן באמצעות WebAssembly או JavaScript בצד הלקוח, פרסרים של XLSX הם הרבה יותר מתוחזקים ופחות חשופים לבאגי רינדור קיצוניים מאשר פרסרים בינריים בצד הלקוח.</p>
<h3 id="4-צינורות-קלט-של-צד-שלישי">4. צינורות קלט של צד שלישי</h3>
<p>אם אתה מייצא קבצים ללקוחות ארגוניים חיצוניים, מדיניות אבטחה תאגידית מחמירה רבות מסמנת קבצי <code>.xlsb</code>. מכיוון שקבצי BIFF12 יכולים לאחסן מקרו VBA באופן זהה לקבצי <code>.xlsm</code> (בלי צורך בהרחבה נפרדת), חלק ממסנני הדואר וסורקי חומות האש מבצעים בידוד של העלאות <code>.xlsb</code> כאיומים פוטנציאליים הנושאים מקרו.</p>
<h2 id="6-השוואה-מסכמת-איזה-פורמט-מנצח">6. השוואה מסכמת: איזה פורמט מנצח?</h2>
<table>
<thead>
<tr>
<th style="text-align:left">תכונה</th>
<th style="text-align:left">XLSX</th>
<th style="text-align:left">XLSB</th>
<th style="text-align:left">זוכה</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>קריאה / ניתוח מהירות</strong></td>
<td style="text-align:left">מתון עד גרוע</td>
<td style="text-align:left">מהיר מאוד</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>כתיבה / מהירות יצירה</strong></td>
<td style="text-align:left">תובעני למעבד</td>
<td style="text-align:left">מהיר</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>דחיסת קבצים</strong></td>
<td style="text-align:left">טוב</td>
<td style="text-align:left">מצוין (~40-50% קטן יותר)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>הקצאת זיכרון</strong></td>
<td style="text-align:left">גבוה (לחץ גבוה על איסוף זבל)</td>
<td style="text-align:left">נמוך (קריאת בתים ישירה)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>תאימות כלי</strong></td>
<td style="text-align:left">אוניברסלי</td>
<td style="text-align:left">גבוה, אך סלקטיבי</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>חיכוך סריקת אבטחה</strong></td>
<td style="text-align:left">מינימלי</td>
<td style="text-align:left">חיובי שגוי מדי פעם</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>יכולת מאקרו</strong></td>
<td style="text-align:left">לא (<code>.xlsm</code> נדרש)</td>
<td style="text-align:left">כן (תומך במקרו באופן מקורי)</td>
<td style="text-align:left"><strong>קשר</strong></td>
</tr>
</tbody>
</table>
<h2 id="7-פסק-הדין-של-המפתחים">7. פסק הדין של המפתחים</h2>
<p>השתמש ב-<strong>XLSX</strong> כאשר:</p>
<ul>
<li>הקבצים קטנים עד בינוניים בגודל (&lt; 50,000 שורות).</li>
<li>הקבצים שלך חייבים להיספג על ידי פלטפורמות SaaS של צד שלישי או אפליקציות צרכניות (למשל, Google Sheets).</li>
<li>אינך יכול לשלוט בסביבת הלקוח הסופי הקורא את הקובץ.</li>
</ul>
<p>החלף ל-<strong>XLSB</strong> כאשר:</p>
<ul>
<li>אתה בונה צינורות פנימיים, עבודות אצווה, מערכות ETL, או משימות עובד שמטפל בחילוץ נתונים עצום (&gt; 100,000 שורות).</li>
<li>השרתים שלכם חווים שגיאות חוסר זיכרון (OOM) במהלך סריאליזציה או דסיריאליזציה של גיליון אלקטרוני.</li>
<li>עליכם למזער את טביעות הרגל של אחסון S3/Blob ואת זמן המעבר ברשת עבור מודלים פיננסיים חוזרים גדולים או ייצוא נתונים.</li>
</ul>
<p>המעבר ל‑XLSB הוא לעיתים פשוט כמו שינוי מחרוזת תצורה בשירות הייצוא שלכם, והוא מספק את סוג השיפור בתפוקה של 3‑5 פעמים, שבדרך כלל דורש שבועות של אופטימיזציית קוד.</p>
<h2 id="שאלות-נפוצות-faq">שאלות נפוצות (FAQ)</h2>
<p>**Q1: האם קובץ <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> תומך באותם מגבלות שורות ועמודות בדיוק כמו קובץ <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a>?
כן; שני הפורמטים XLSB ו‑XLSX חולקים את אותה תקרת רשת של 1,048,576 שורות על ידי 16,384 עמודות לכל גיליון.</p>
<p>**Q2: האם קובץ XLSB יכול לאחסן מאקרו VBA בבטחה מבלי לשנות את סיומת הקובץ שלו?
כן, בניגוד ל‑XLSX (שדורש שמירה כ‑XLSM כדי להריץ קוד), XLSB תומך באחסון מאקרו VBA בינארי באופן טבעי בתוך פורמט הקובץ <code>.xlsb</code> עצמו.</p>
<p>**Q3: מדוע שמירת קובץ כ‑XLSB מצמצמת את גודלו אם שני הפורמטים כבר דחוסים ב‑ZIP?
XLSB מבטל תגיות סימון טקסט ארוכות ומקודד מיקומי תאים, רשומות וערכים מספריים גולמיים לזרמי בתים בינאריים צפופים הדוחסים בצפיפות גבוהה יותר מאשר מחרוזות XML רגילות.</p>
<p>**Q4: האם Google Sheets יכול לייבא ולערוך קבצי XLSB ישירות?
לא; Google Sheets אינו יכול לפתוח או להמיר קבצי <code>.xlsb</code> באופן מקורי, ולכן יש צורך להמיר אותם ל-<code>.xlsx</code> או CSV לפני הייבוא.</p>
<p>**Q5: האם קבצי XLSB נוטים יותר לשחיתות נתונים מאשר קבצי XLSX?
בעוד קבצי XML יכולים לעתים להיבדק או לתוקן ידנית בעזרת עורך טקסט כאשר הם פגומים חלקית, זרמי BIFF12 הבינאריים דורשים מרחקי בתים מדויקים וקשה לשחזרם ידנית אם סקטורים מבניים נפגעים.</p>
<h2 id="ראה-גם">ראה גם</h2>
<ul>
<li><a href="https://blog.fileformat.com/en/spreadsheet/csv-vs-xlsx-vs-ods-in-2026-best-spreadsheet-format-for-developers/">CSV נגד XLSX נגד ODS ב‑2026: פורמט הגיליון האלקטרוני הטוב ביותר למפתחים</a></li>
<li><a href="https://blog.fileformat.com/en/spreadsheet/xls-vs-xlsx-vs-xlsm-vs-xlsb-choosing-the-right-spreadsheet-format/">XLS נגד XLSX נגד XLSM נגד XLSB - בחירת פורמט הגיליון האלקטרוני הנכון</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/what-is-excel/">מה זה Excel? מידע מרכזי שעליך לדעת</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/excel-file-extensions-xlsx-xlsm-xls-xltx-xltm/">פורמטים של קבצי Excel: XLSX, XLSM, XLS, XLTX, XLTM</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/xls-vs-xlsx/">ההבדל בין XLS ל‑XLSX</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
