<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
</style>
</head>
<body>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse:collapse;width:100%;"> <thead style="background:#f2f2f2;"> <tr> <th>Criteria</th> <th>Client-Side CSV Handling (Browser)</th> <th>Server-Side CSV Handling (.NET 8)</th> <th>Recommended Approach</th> </tr> </thead> <tbody> <tr> <td><b>Maximum Safe File Size</b></td> <td>≤ 100 MB (hard stop at 200 MB)</td> <td>≤ 500 MB normally<br>Up to 1 GB (exception only)</td> <td>Block client > 200 MB<br>Allow server streaming</td> </tr>
<tr>
<td><b>2 GB CSV Feasibility</b></td>
<td>❌ Not feasible<br>Browser crash guaranteed</td>
<td>⚠️ Possible but risky<br>Background job required</td>
<td>Avoid via browser<br>Use offline ingestion</td>
</tr>
<tr>
<td><b>Memory Usage</b></td>
<td>High (JS heap limited)</td>
<td>Low (streaming row-by-row)</td>
<td>Never load full CSV in memory</td>
</tr>
<tr>
<td><b>Validation Strategy</b></td>
<td>Headers + sample rows only</td>
<td>Full validation per row</td>
<td>Hybrid: client pre-check, server full check</td>
</tr>
<tr>
<td><b>Performance Stability</b></td>
<td>Low for large files<br>Tab freeze / crash</td>
<td>High when streamed properly</td>
<td>Server streaming preferred</td>
</tr>
<tr>
<td><b>Error Recovery</b></td>
<td>Poor (reload loses progress)</td>
<td>Good (retry, resume possible)</td>
<td>Server-side logging & retry</td>
</tr>
<tr>
<td><b>User Experience</b></td>
<td>Good for small files</td>
<td>Better for large files</td>
<td>Warn user for large uploads</td>
</tr>
<tr>
<td><b>Network Reliability</b></td>
<td>Weak for long uploads</td>
<td>Better control & timeout handling</td>
<td>Chunked / streamed upload</td>
</tr>
<tr>
<td><b>Implementation Complexity</b></td>
<td>High for large files</td>
<td>Moderate but controlled</td>
<td>Keep client logic minimal</td>
</tr>
<tr>
<td><b>Security & Abuse Risk</b></td>
<td>High (large payloads)</td>
<td>Lower (limits & throttling)</td>
<td>Server-side enforcement</td>
</tr>
<tr>
<td><b>Recommended Usage</b></td>
<td>Small CSVs, quick checks</td>
<td>Medium & large CSVs</td>
<td>Use size-based routing</td>
</tr>
</table>
</body>
</html>



