C# 函数节流,简单易懂的节流(Throttler)教程

.NET Standard 2.0 通用扩展库!开箱即用。
Nuget地址https://www.nuget.org/packages/Sesy
Gitee地址https://gitee.com/sesy/sesy

一、概念

节流算法是一种用于控制函数执行频率的技术。它通过限制函数在一定时间间隔内的执行次数,以避免过多的函数调用,提高性能资源利用率。常见的节流算法有定时器节流和时间戳节流两种实现方式。定时器节流在函数调用后设定一个定时器,在定时器到期前不再执行函数;时间戳节流则是记录上次函数执行的时间戳,在一定时间间隔内只有当当前时间超过上次执行时间加上设定的时间间隔时才执行函数。

二、思维图

1.1 流程图

在这里插入图片描述

2.2 时序图

在这里插入图片描述

三、代码实现

/// <summary>
/// 节流调度器 用于限制函数的执行频率
/// </summary>
public class ThrottlerDispatcher
{
	private bool isRunning;

	/// <summary>
	/// 函数节流
	/// </summary>
	/// <param name="action"></param>
	/// <param name="delay"></param>
	public void Throttle(Action action, int delay)
	{
		if (!isRunning)
		{
			action?.Invoke();
			isRunning = true;
			new Timer(_ =>
			{
				isRunning = false;
			}, null, delay, Timeout.Infinite);
		}
	}
}
static void Main(string[] args)
{
	ThrottlerDispatcher dispatcher = new ThrottlerDispatcher();
	// 连续调用10次 模拟 屏幕滚动事件 或 用户输入事件
	for (int i = 0; i < 10; i++)
	{
		// 节流,100ms 100ms内仅允许函数执行一次 后续会被屏蔽掉,避免过多的函数调用
		dispatcher.Throttle(() =>
		{
			Console.WriteLine(i);
		}, 100);
	}
	// 仅第一次调用被执行,后续调用都未能超过100ms的间隔,被节流函数限制执行
	// 输出结果 0
	Console.Read();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值