C# 高效讀取大文件

????????在 C# 中高效讀取大文件時,需根據文件類型和場景選擇不同的技術方案,以下為綜合實踐方法及注意事項:

一、文本文件讀取方案

逐行讀取

StreamReader.ReadLine?:通過流式處理逐行加載文本,避免一次性加載整個文件到內存,適合超大文本文件(如日志文件)。

using (StreamReader sr = new StreamReader("file.txt", Encoding.UTF8, bufferSize: 1024*1024))?
{
? ? string line;
? ? while ((line = sr.ReadLine()) != null)?
? ? {
? ? ? ? // 處理每行數據
? ? }
}

File.ReadLines():返回 IEnumerable<string> 實現惰性加載,語法簡潔但需注意異常處理(如文件不存在時拋出 FileNotFoundException)。

分批次處理

結合數據庫事務分批入庫(如每 1 萬條提交一次),減少內存峰值和 I/O 壓力:

List<string> batch = new List<string>(10000);
while ((line = sr.ReadLine()) != null)?
{
? ? batch.Add(line);
? ? if (batch.Count >= 10000)?
? ? {
? ? ? ? InsertToDatabase(batch);
? ? ? ? batch.Clear();
? ? }
}

二、二進制文件讀取方案

FileStream + 字節數組

直接操作字節流,適合非文本文件(如圖像、音視頻):

using (FileStream fs = new FileStream("file.bin", FileMode.Open))?
{
? ? byte[] buffer = new byte[4096];
? ? int bytesRead;
? ? while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)?
? ? {
? ? ? ? // 處理二進制數據塊
? ? }
}

BufferedStream 加速

對底層流添加緩沖區(默認 4KB),減少直接訪問存儲設備的頻率,提升 I/O 效率。

三、優化技巧

????????緩沖區設置:通過 StreamReader 構造函數指定 bufferSize(如 1MB),平衡內存與讀取頻率。

????????編碼處理:明確指定文本編碼(如 Encoding.GetEncoding("GB2312"))避免亂碼。

????????資源釋放:使用 using 語句確保流對象及時釋放,防止內存泄漏。

四、方案對比

方法?? ??? ??? ??? ?????????????????適用場景?? ??? ??? ?????????內存占用?? ??? ?靈活性

StreamReader?? ????????????超大文本逐行處理?? ?????低?? ??? ??? ?????高(可控性強)

File.ReadLines()?? ?????????中小文本簡潔操作?? ?????中?? ??? ??? ?????中

FileStream?? ??? ??????????????二進制文件處理?? ?????????低?? ??? ??? ?????高

注意事項:對于超大規模文件(如數十 GB),需避免 File.ReadAllLines 等一次性加載方法,防止內存溢出
?

如果您喜歡此文章,請收藏、點贊、評論,謝謝,祝您快樂每一天。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82119.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習模型可視化:Netron的安裝和使用

文章目錄 Netron簡介Netron加載模型類型Netron使用方式Netron功能介紹完整案例總結 Netron簡介 Netron是一個支持PyTorch的可視化工具&#xff0c;它的開發者是微軟的Lutz Roeder&#xff0c;操作簡單快捷&#xff0c;就像保存文件、打開文件一樣&#xff0c;簡單高效。Netron…

pytorch LSTM 結構詳解

最近項目用到了LSTM &#xff0c;但是對LSTM 的輸入輸出不是很理解&#xff0c;對此&#xff0c;我詳細查找了lstm 的資料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…

AUTOSAR AP 入門0:AUTOSAR_EXP_PlatformDesign.pdf

AUTOSAR AP官網&#xff1a;AUTOSAR Adaptive Platform設計AUTOSAR AP的目的&#xff0c;翻譯版官方文檔 AUTOSAR_EXP_PlatformDesign.pdf &#xff1a; https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …

零碳辦會新范式!第十屆國際貿易發展論壇——生物能源和可持續發展專場,在京舉辦

2025年5月16日&#xff0c;第十屆國際貿易發展論壇在北京國際飯店盛大啟幕。本屆論壇由北京綠林認證有限公司主辦。作為匯聚行業智慧、引領發展方向的盛會&#xff0c;國際貿易發展論壇每兩年一屆&#xff0c;本次會議是第十屆&#xff0c;至今已走過近20年光輝歷程。多年來&am…

ECharts圖表工廠,完整代碼+思路邏輯

Echart工廠支持柱狀圖&#xff08;bar&#xff09;折線圖&#xff08;line&#xff09;散點圖&#xff08;scatter&#xff09;餅圖&#xff08;pie&#xff09;雷達圖&#xff08;radar&#xff09;極坐標柱狀圖&#xff08;polarBar&#xff09;和極坐標折線圖&#xff08;po…

如何制作令人印象深刻的UI設計?

1. 規劃用戶旅程 規劃用戶旅程是創建高效且吸引人的UI設計的第一步。設計師需要深入了解目標用戶群體的需求和行為模式&#xff0c;這通常涉及用戶調研、創建用戶角色&#xff08;Personas&#xff09;和繪制用戶旅程圖&#xff08;User Journey Maps&#xff09;。通過這種方…

k8s 離線安裝 kube-prometheus-stack

配置共享存儲 Prometheus 需要配置持久化存儲&#xff0c;防止數據丟失 服務端 服務端安裝 NFS 服務 sudo apt install nfs-kernel-server 創建共享目錄&#xff0c;在服務器端創建 /nfs 目錄。 mkdir /nfs chmod -R 777 /nfs # 設置文件權限 nfs目錄下只給了默認權限&#xff…

ceph osd 磁盤分區對齊

分區對齊可以提高讀寫速度的原理是什么 分區對齊可以提高磁盤讀寫速度的原理主要在于 磁盤的物理扇區大小與操作系統發起的讀寫請求之間是否對齊。如果不對齊,每次讀寫操作可能會跨越多個物理扇區,造成額外的 I/O 操作,從而降低性能。 ?? 原理詳解 1. 物理扇區(Physica…

Simon J.D. Prince《Understanding Deep Learning》

學習神經網絡和深度學習推薦這本書&#xff0c;這本書站位非常高&#xff0c;且很多問題都深入剖析了&#xff0c;甩其他同類書籍幾條街。 多數書&#xff0c;不深度分析、沒有知識體系&#xff0c;知識點零散、章節之間孤立。還有一些人Tian所謂的權威&#xff0c;醒醒吧。 …

【泛微系統】后端開發Action常用方法

后端開發Action常用方法 代碼實例經驗分享:代碼實例 經驗分享: 本文分享了后端開發中處理工作流Action的常用方法,主要包含以下內容:1) 獲取工作流基礎信息,如流程ID、節點ID、表單ID等;2) 操作請求信息,包括請求緊急程度、操作類型、用戶信息等;3) 表單數據處理,展示…

SSH的screen方法

創建一個screen窗口&#xff0c;&#xff08;在需要運行程序的文件夾內&#xff09;使用 screen -S name 命令&#xff0c;其中 name 是窗口的名字。 在窗口中執行需要的命令。 當需要臨時離開時&#xff0c;使用快捷鍵 ctrlA D 回來時&#xff0c;使用 screen -r name 恢復…

無法訪問org.springframework.boot.SpringApplication

無法訪問org.springframework.boot.SpringApplication 檢查springboot和jdk的版本是否適配檢查jdk的設置是否統一 主要檢查下面幾處地方

洛谷 P1800 software(DP+二分)【提高+/省選?】

題目鏈接 https://www.luogu.com.cn/problem/P1800 思路 對于大于等于最優解的天數&#xff0c;一定能使公司交付軟件。對于小于最優解的天數&#xff0c;一定無法使公司交付軟件。所以考慮二分答案 x x x。 定義 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i個人做了 j j j…

C++性能測試工具——sysprof的使用

一、sysprof sysprof相對于前面的一些性能測試工具來說&#xff0c;要簡單不少。特別是其圖形界面的操作&#xff0c;非常容易上手&#xff0c;它還支持分析文件的保存和導入功能&#xff0c;這是一個非常不錯的功能。做為一款系統性能測試工具&#xff0c;它支持多種硬件平臺…

redis數據持久化和配置-15(備份和還原 Redis 數據)

備份和還原 Redis 數據 備份和恢復數據是管理任何數據庫系統&#xff08;包括 Redis&#xff09;的關鍵方面。數據丟失可能是由于硬件故障、軟件錯誤、意外刪除甚至惡意攻擊而發生的。因此&#xff0c;擁有強大的備份和恢復策略對于確保數據持久性和業務連續性至關重要。本課將…

【上位機——WPF】布局控件

布局控件 常用布局控件Panel基類Grid(網格)UniformGrid(均勻分布)StackPanel(堆積面板)WrapPanel(換行面板)DockerPanel(停靠面板)Canvas(畫布布局)Border(邊框)GridSplitter(分割窗口)常用布局控件 Grid:網格,根據自定義行和列來設置控件的布局StackPanel:棧式面板,包含的…

打卡Day33

簡單的神經網絡 數據的準備 # 仍然用4特征&#xff0c;3分類的鳶尾花數據集作為我們今天的數據集 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as np# 加載鳶尾花數據集 iris load_iris() X iris.data # …

python開發環境管理和包管理

在 Python 開發中&#xff0c;環境管理 和 包管理 是兩個非常重要的概念。它們幫助開發者&#xff1a; 這里寫目錄標題 一、什么是 Python 環境管理&#xff1f;二、什么是 Python 包管理&#xff1f;三、常見文件說明&#xff08;用于包管理和環境配置&#xff09;四、典型流程…

Mybatis面向接口編程

添加與Mapper接口的映射 <!--UserMapper.xml--> <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> …

GMP模型入門

go的并發實現采用的是M:N的線程模型&#xff0c;落地就是gmp模型。 M:N模型如下圖&#xff1a; gmp模型如下圖&#xff1a; --- Go 的 GMP 模型是其 高效并發調度機制的核心。GMP 代表&#xff1a; G&#xff1a;Goroutine&#xff08;用戶態線程&#xff09; M&#xff1a;…