欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】大批量判斷文件是否存在的兩種方法效率對比

admin
2024年7月19日 23:53 本文熱度 1014

在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候會需要加載大批量的文件,而且可能還會存在部分文件缺失的情況,那么如何才能快速判斷文件是否存在呢?如果處理不當,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程序的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否存在的方式以及效率比較。

涉及知識點

在本示例中,涉及的知識點如下:
  1. 單個文件是否存在判斷,通常采用File.Exists(file)來判斷文件是否存在,存在返回true,不存在返回false。
  2. 獲取目錄下的文件,通常采用Directory.GetFiles(dir)來獲取目錄下的文件,返回目錄下的文件列表。
  3. 計算程序執行耗時,通常采用Stopwatch進行計算,單位可以是毫秒,秒,TimeSpan等。

前提

本示例的前提是,通常有多個文件(如:幾十,幾百,幾千,幾萬)需要判斷是否存在,且文件隸屬于多個目錄。

循環文件判斷

C#默認提供的文件存在判斷方式,一般用于單個文件。如果有多個文件,可以批量循環進行判斷。步驟如下:
  1. 循環需要判斷的文件列表
  2. 每個文件都判斷一次文件是否存在。 
代碼如下所示:
/// <summary>/// 逐一判斷是否存在,并返回判斷時長/// </summary>/// <param name="files"></param>/// <returns></returns>private static long CheckFileExist01(List<string> files){  Stopwatch stopwatch = new Stopwatch();  stopwatch.Start();  foreach (var file in files)  {    if (File.Exists(file))    {     }  }  stopwatch.Stop();  return stopwatch.ElapsedMilliseconds;}

上述判斷方式,如果有一百個文件,則會進行一百次的文件是否存在判斷,都是磁盤文件判斷。

統一獲取判斷

統一獲取,即獲取文件夾目錄下的文件,在內存中判斷文件是否存在。步驟如下:
  1. 先獲取文件列表所在的文件夾,

  2. 獲取文件夾中的所有文件,存入字典中,

  3. 然后通過字典判斷是否包含文件

代碼如下所示:

/// <summary>/// 統一獲取文件夾目錄中的文件,再進行判斷/// </summary>/// <param name="files"></param>/// <returns></returns>private static long CheckFileExist02(List<string> files){  Stopwatch stopwatch = new Stopwatch();  stopwatch.Start();  Dictionary<string,string> dictionary = new Dictionary<string, string>();  var folders = files.Select(item=>Path.GetDirectoryName(item)).Distinct().ToList();  foreach (var folder in folders)  {    var tmpFiles=Directory.GetFiles(folder);    foreach(var tmpFile in tmpFiles)    {      dictionary[tmpFile] = tmpFile;    }  }  foreach (var file in files)  {    if (dictionary.TryGetValue(file, out string a))    {     }  }  stopwatch.Stop();  return stopwatch.ElapsedMilliseconds;}

性能比較

在本示例中,分別從不同維度進行比較,如:本地文件和共享目錄文件,以及不同文件數量進行比較。分別如下:

1. 本地文件
本地文件,分別對10到500個文件進行判斷是否存在,對兩種方式的耗時比較。
其中橫坐標為文件數量,縱坐標為判斷文件是否存在的執行耗時(毫秒)。如下所示:
通過比較發現,對于本地文件,結論如下:
  1. 對于需要判斷的文件數量較少時,循環單個文件和統一獲取再判斷,性能上并無太大差異。
  2. 隨著需要判斷的文件數量逐漸增多,循環單個文件的耗時會增加,而統一獲取在內存判斷,則并無太大波動。
  3. 受操作系統影響,性能耗時可能會存在波動。

2. 共享目錄文件

共享文件,分別對10到500個文件進行判斷是否存在,對兩種方式的耗時比較。
其中橫坐標為文件數量,縱坐標為判斷文件是否存在的執行耗時(毫秒)。如下所示:
通過比較發現,對于共享目錄文件,結論如下:
  1. 隨著需要判斷的文件數量逐漸增多,循環單個文件的耗時會增加,而統一獲取在內存判斷,則并無太大波動。
  2. 受操作系統或網絡影響,性能耗時可能會存在波動。

結論

通過對本地文件和共享目錄下文件,以及不同數量的文件進行文件是否存在校驗的耗時比較分析,結論如下:

如果需要判斷的文件數量比較多,且分散存儲的目錄雖然不唯一,卻相對集中,建議采用第二種(統一獲取)方式進行校驗。


該文章在 2024/7/22 12:34:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved