C# Task 循环任务_C# 基础知识系列- 17 小工具优化

本文介绍了如何使用C#的Task进行异步并发优化,解决遍历文件目录时间长的问题。通过任务实现数据复用,避免大量内存消耗,并采用循环查询模式,设置退出条件,提高小工具的实用性。详细讲述了如何改造方法以实现异步遍历、文件缓存和用户退出机制。
摘要由CSDN通过智能技术生成

0. 前言

不知道有没有动手能力强的小伙伴照着上一篇的内容写过程序呢?如果有的话,应该会在使用的时候发现以下几个问题:

  1. 每次启动都需要经过漫长的时间去遍历磁盘里的文件目录
  2. 因为数据是用的字典保存的,所以会消耗大量的内存空间
  3. 不能多次查询

现在我们就针对这些问题,让我们的小工具实用起来。

1. 分析与实现

在动手之前,我们先分析一下问题。在实际开发之前,无论是接到什么需求都要先仔细分析一下,确定好方案再动手方为开发的正道。嗯,没毛病。因为开发过程中跟产品对线、跟客户对线要占整个项目的一半左右时间。好了,不废话了。继续:

遍历文件目录的时间过长,那么我们是不是可以用异步并发去遍历呢?

数据用字典保存会消耗内存空间,那么我们是不是可以用其他的方式保存呢?

不能多次查询,是不是可以使用循环,然后设置一个退出条件?

1.1 C#的异步/并发实现

在C#里,异步和并发的实现是依据线程、任务来实现的。在之前《C# 基础知识系列- 12 任务和多线程》里大概介绍了一下线程和任务,我们知道线程本身是没法返回数据的,它与主线程进行数据交互的过程十分需要注意线程安全。而任务可以返回数据,不需要像线程一样小心翼翼地与主线程进行数据交互。任务有一个优点,它比线程更轻量,所以在当前环境下我们可以试试任务。

当然,线程也有优点,那就是线程的运行环境相对更封闭一点,它能完成一个长的大型运算。

那么继续上一篇的内容,先引用 :

using System.Threading.Tasks;

先提取一组根据可枚举目录集合创建任务组并取得结果的方法:

public static Dictionary<string,List<string>> OverDirectories(IEnumerable<DirectoryInfo> directories)
{
    var tasks = directories.Select(dir => Task.Run(()=>OverDirectories(di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值