.NET Standard 2.0 通用扩展库!
开箱即用。
Nuget地址
:https://www.nuget.org/packages/Sesy
Gitee地址
:https://gitee.com/sesy/sesy
一、概念
函数防抖是一种常用的优化技术,用于限制函数
在短时间内频繁触发
的情况。它通过延迟函数的执行
,直到一定的时间间隔内没有新的触发事件发生,从而避免不必要的重复执行。防抖算法的核心思想是在触发事件后设置一个定时器,如果在定时器时间内再次触发事件,则重新计时,直到定时器时间结束后执行函数。这样可以有效地减少函数的执行次数,提升性能和用户体验,防抖算法通常用于处理用户输入、滚动事件等可能导致频繁触发的场景。
二、思维图
1.1 流程图
1.2 时序图
三、代码实现
/// <summary>
/// 防抖调度器 确保函数在一定时间间隔内以固定的频率执行
/// </summary>
public class DebounceDispatcher
{
private Timer timer;
/// <summary>
/// 函数防抖
/// </summary>
/// <param name="action">需要执行的<see cref="Action"/></param>
/// <param name="delay">时间间隔/毫秒</param>
public void Debounce(Action action, int delay)
{
timer?.Dispose();
timer = new Timer((_) =>
{
action?.Invoke();
}, null, delay, Timeout.Infinite);
}
}
static void Main(string[] args)
{
DebounceDispatcher dispatcher = new DebounceDispatcher();
// 连续调用10次 模拟 屏幕滚动事件 或 用户输入事件
for (int i = 0; i < 10; i++)
{
// 防抖,等待100ms 延迟函数的执行,直到100ms内没有新的触发事件发生
dispatcher.Debounce(() =>
{
Console.WriteLine(i);
}, 100);
}
// 仅最后一次调用被执行,前几次调用都因100ms内有新的调用导致未执行。
// 输出结果 10
Console.Read();
}