System.IO.Directory.EnumerateFiles 和 System.IO.Directory.GetFiles 的问题

麦壳饼 2017-04-24 11:26:20
System.IO.Directory.GetFiles 在 目录里 文件量相当大时卡太久 !
所以 使用了 System.IO.Directory.EnumerateFiles , 大量文件时 这个方法没问题, 但有时候会锁死目录。 不知道啥情况。
当文件夹内存了 几十万文件时 , 如何快速列举?
大家有没有好方法。
因为 网络正常情况下 文件都是发送走了的, 但是断网的时候这些文件就积压了。
所以, 大家有没有好方法应对这种问题。
...全文
515 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel6709 2017-04-25
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
图片服务器不要说上万,几十万,几百万都是很正常的事情,但图片服务器才不会来遍历文件夹下面的内容,他们都是将路径存储在各个位置,可以通过算法或者其它辅助路径来快速找到文件
stherix 2017-04-25
  • 打赏
  • 举报
回复
引用 7 楼 diaodiaop 的回复:
[quote=引用 5 楼 stherix 的回复:] 文件夹里存几十万文件就说明设计有问题 要用其他方法来缓存需要发送的内容
不能这么说吧... 假设是用户头像或者是用户上传的东西 上传10W个图片 很正常啊.. 这难道说明设计有问题?? [/quote] 我是没见过要上传10万个图片的应用
引用
因为 网络正常情况下 文件都是发送走了的, 但是断网的时候这些文件就积压了。
而且这些图片在断网情况下还会不断的累积 就算这是重要的日志文件,要把日志传到服务器上也最好是用数据库 或者用合适的方式在写文件的时候对其进行合并,尽量减少文件个数 而且也要设置日志的最大个数,或者数据库大小 总不能就这么让占满整个硬盘
by_封爱 版主 2017-04-25
  • 打赏
  • 举报
回复
引用 5 楼 stherix 的回复:
文件夹里存几十万文件就说明设计有问题 要用其他方法来缓存需要发送的内容
不能这么说吧... 假设是用户头像或者是用户上传的东西 上传10W个图片 很正常啊.. 这难道说明设计有问题??
xian_wwq 2017-04-25
  • 打赏
  • 举报
回复
引用 楼主 mysticboy 的回复:
System.IO.Directory.GetFiles 在 目录里 文件量相当大时卡太久 ! 所以 使用了 System.IO.Directory.EnumerateFiles , 大量文件时 这个方法没问题, 但有时候会锁死目录。 不知道啥情况。 当文件夹内存了 几十万文件时 , 如何快速列举? 大家有没有好方法。 因为 网络正常情况下 文件都是发送走了的, 但是断网的时候这些文件就积压了。 所以, 大家有没有好方法应对这种问题。
因为异常中断的时间无法预知,所以感觉还是需要人为设定缓存文件的上限,不能是无限制的。 如果客户同意,给生成的文件设定数量上限,一旦超过上限,循环进行覆盖,保证总体数量可控; 如果文件非常重要,不能循环覆盖,可以通过监测文件夹变化,创建文件索引 或移动文件到子文件夹的形式, 原则就是可检索和拆分,保证单个文件夹中数量可控, 否则通过遍历的形式很容易就把程序拖死了。
stherix 2017-04-25
  • 打赏
  • 举报
回复
文件夹里存几十万文件就说明设计有问题 要用其他方法来缓存需要发送的内容
tanta 2017-04-25
  • 打赏
  • 举报
回复
The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.。 -----------来自msdn。 也就是说,getFiles是必须整个读完才返回,而EnumerateFiles是可以在返回整个collection 前就直接开始enumerating,所以你才有getfiles卡死的感觉,而 EnumerateFiles没有。 从你的描述来看,你是生成n多小文件来缓存网络数据。如果我没猜错的话,我感觉这种方式是不可取的。缓存最好在内存中开辟,迫不得已需要用磁盘缓存,也要尽量避免生成多个小文件的方式。
  • 打赏
  • 举报
回复
引用 2 楼 qq_25095899 的回复:
[quote=引用 1 楼 starfd 的回复:] 为啥不考虑弄个数据库列表对应呢,这样遍历就依赖数据库了
有可能文件生成的时候不是楼主能控制的,他只能被动的去处理文件夹里的东西。[/quote] 那也可以通过FileSystemWatcher来监控变化的
大然然 2017-04-24
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
为啥不考虑弄个数据库列表对应呢,这样遍历就依赖数据库了
有可能文件生成的时候不是楼主能控制的,他只能被动的去处理文件夹里的东西。
  • 打赏
  • 举报
回复
为啥不考虑弄个数据库列表对应呢,这样遍历就依赖数据库了
计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)内容概要:本文围绕“计及源荷不确定性的综合能源生产单元运行调度与容量配置优化”展开研究,利用Matlab代码实现相关模型的构建与仿真。研究重点在于综合能源系统中多能耦合特性以及风、光等可再生能源出力和负荷需求的不确定性,通过鲁棒优化、场景生成(如Copula方法)、两阶段优化等手段,实现对能源生产单元的运行调度与容量配置的协同优化,旨在提高系统经济性、可靠性和可再生能源消纳能力。文中提及多种优化算法(如BFO、CPO、PSO等)在调度与预测中的应用,并强调了模型在实际能源系统规划与运行中的参考价值。; 适合人群:具备一定电力系统、能源系统或优化理论基础的研究生、科研人员及工程技术人员,熟悉Matlab编程和基本优化工具(如Yalmip)。; 使用场景及目标:①用于学习和复现综合能源系统中考虑不确定性的优化调度与容量配置方法;②为含高比例可再生能源的微电网、区域能源系统规划设计提供模型参考和技术支持;③开展学术研究,如撰写论文、课题申报时的技术方案借鉴。; 阅读建议:建议结合文中提到的Matlab代码和网盘资料,先理解基础模型(如功率平衡、设备模型),再逐步深入不确定性建模与优化求解过程,注意区分鲁棒优化、随机优化与分布鲁棒优化的适用场景,并尝试复现关键案例以加深理解。
内容概要:本文系统分析了DesignData(设计数据)的存储结构,围绕其形态多元化、版本关联性强、读写特性差异化等核心特性,提出了灵活性、版本化、高效性、一致性和可扩展性五大设计原则。文章深入剖析了三类主流存储方案:关系型数据库适用于结构化元信息存储,具备强一致性与高效查询能力;文档型数据库适配半结构化数据,支持动态字段扩展与嵌套结构;对象存储结合元数据索引则有效应对非结构化大文件的存储需求,具备高扩展性与低成本优势。同时,文章从版本管理、性能优化和数据安全三个关键维度提出设计要点,建议采用全量与增量结合的版本策略、索引与缓存优化性能、并通过权限控制、MD5校验和备份机制保障数据安全。最后提出按数据形态分层存储的核心结论,并针对不同规模团队给出实践建议。; 适合人群:从事工业设计、UI/UX设计、工程设计等领域数字化系统开发的技术人员,以及负责设计数据管理系统架构设计的中高级工程师和系统架构师。; 使用场景及目标:①为设计数据管理系统选型提供依据,合理选择或组合使用关系型数据库、文档型数据库与对象存储;②构建支持版本追溯、高性能访问、安全可控的DesignData存储体系;③解决多用户协作、大文件存储、历史版本管理等实际业务挑战。; 阅读建议:此资源以实际应用场景为导向,结合具体数据库类型和表结构设计进行讲解,建议读者结合自身业务数据特征,对比分析不同存储方案的适用边界,并在系统设计中综合考虑成本、性能与可维护性之间的平衡。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧