【问题标题】:What happened if I set Interval less than 1 second in asp:Timer?如果我在 asp:Timer 中设置间隔小于 1 秒会发生什么?
【发布时间】:2021-11-06 08:33:02
【问题描述】:

我刚刚使用ASP.NetWebforms 创建了排队系统,使用asp:Timerasp:UpdatePanel 来部分刷新页面。我将 asp:Timer Interval 设置为“100”,即 0.1 秒。每次部分页面刷新后,称为存储过程的页面有时运行不佳。如果我将Interval 设置为小于 1 秒,是否有针对我的问题的最佳实践以及对我的系统有什么影响?

【问题讨论】:

  • ...一些进程运行不佳... 这到底是什么意思?请发布您的代码。
  • 如果您所有用户的浏览器不断向您的服务器发送请求页面内容以刷新显示的 HTTP 请求,那么提供良好体验的可能性有多大。如果您想要这样的工作流程,那就是设计好的为此,请使用 Blazor
  • @squillman 实际上是在部分页面刷新后页面调用存储过程,这有时运行不佳。我将编辑我的问题。谢谢。
  • @CaiusJard 我会考虑使用 Blazor,谢谢
  • 我的观点是“有时运行不佳”并不能充分描述您的问题。这可能意味着很多事情。提问时要具体。给出您收到的错误(或表明您没有收到任何错误),描述性能问题,显示您收集的指标,如果它在 SQL Server 中,则显示查询和执行计划。帮助我们帮助您。

标签: sql asp.net sql-server vb.net


【解决方案1】:

如果您的计时器在下一次计时之前没有足够的时间完成,解决方案是在计时器回调本身内手动调用下一次计时

ReadOnly interval As Integer = 100
ReadOnly minIntervalBetweenCalls As Integer = 0
Private ReadOnly Timer2 As New System.Threading.Timer(AddressOf Timer2_Tick, Nothing, interval, -1)

Private Sub Timer2_Tick(state As Object)
    Dim nextRunTime = DateTime.Now.AddMilliseconds(interval)
    ' run processes
    Timer2.Change(Math.Max(nextRunTime.Subtract(DateTime.Now).Milliseconds, minIntervalBetweenCalls ), -1)
End Sub

数学确保下一个滴答将在当前滴答开始后 100 毫秒发生,或者在当前滴答之后立即发生,以适应超过 100 毫秒的滴答。

【讨论】:

  • 注意:这应该回答你的问题,但你的问题下面的 cmets 对你的基本设计提出了额外的问题,应该认真考虑!
猜你喜欢
  • 1970-01-01
  • 2011-08-06
  • 2019-09-10
  • 2016-07-30
  • 1970-01-01
  • 2022-01-13
  • 2010-09-30
  • 1970-01-01
  • 2019-09-27
相关资源
最近更新 更多