公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

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

涉及知識點

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

前提

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

循環(huán)文件判斷

C#默認提供的文件存在判斷方式,一般用于單個文件。如果有多個文件,可以批量循環(huán)進行判斷。步驟如下:
  1. 循環(huán)需要判斷的文件列表
  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;}

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

統(tǒng)一獲取判斷

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

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

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

代碼如下所示:

/// <summary>/// 統(tǒng)一獲取文件夾目錄中的文件,再進行判斷/// </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;}

性能比較

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

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

2. 共享目錄文件

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

結(jié)論

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

如果需要判斷的文件數(shù)量比較多,且分散存儲的目錄雖然不唯一,卻相對集中,建議采用第二種(統(tǒng)一獲?。┓绞竭M行校驗。


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

主站蜘蛛池模板: 精品久久国产免费影院 | 国产日韩av免费无码一区二区三区 | 精品国产亚洲人成在线 | 91国内精品久久久久怡红院 | 国99精品无码一区二区三区 | 国产精品免费a片 | 97人妻起碰视频免费 | 国产在线无码色视频大全 | 国产美女高潮流 | 91精品无码专区 | 国产精品欧美亚洲韩国日本久 | 国产欧美日韩综合一区二区 | 极品少妇被猛得白浆直流草莓视频 | 国产精品一视频 | 国产三级在线视频播放线 | 东京热加勒比天然素人无码 | 成人无码片黄网站a毛片免费 | 精品国产品国语在线不卡 | 91人妻人人做人碰人人爽 | 国产精品白浆在线观看无码专区 | 国产精品成人无码a片免费网址 | 精品国产经典三级在线看 | 国产成人免费高清 | 国产高清国产精品国产专区 | 国产精品天干天干在线下载 | av天堂中av世界中文在线 | 91麻豆免费免费国产观看 | 国产亚洲精久久久久久无码浪潮 | 国产黄色精品观看 | 高潮毛片无遮挡高清视频播放 | 国产精品亚洲mnbav网站 | 国产av午夜精品 | 高清无码在线一区二区 | 国产精品午夜无码av在线播放 | 97人妻一区二区精品免费 | 国产91精品高清一区二区三区 | 国产精品va无码二区 | 国产一区二区精品尤物 | 成人精品久久中文字幕 | 国产午夜免费啪视频观看视频 | 国产成人aa片在线观看 |