【发布时间】:2014-11-30 00:59:03
【问题描述】:
我在课堂上使用了几个计时器,并且想知道实现它的两个选项:
选项 1:
每条消息都有自己的计时器。
class MessagesManager1
{
Timer _timerA = new Timer();
Timer _timerB = new Timer();
Timer _timerC = new Timer();
public MessagesManager1()
{
_timerA.Interval = 1000; // 1 sec
_timerB.Interval = 3000; // 3 sec
_timerC.Interval = 5000; // 5 sec
_timerA.Elapsed += _timerA_Elapsed;
_timerB.Elapsed += _timerB_Elapsed;
_timerC.Elapsed += _timerC_Elapsed;
_timerA.Start();
_timerB.Start();
_timerC.Start();
}
void _timerA_Elapsed(object sender, ElapsedEventArgs e)
{
// send message A
}
void _timerB_Elapsed(object sender, ElapsedEventArgs e)
{
// send message B
}
void _timerC_Elapsed(object sender, ElapsedEventArgs e)
{
// send message C
}
}
选项 2: 只使用一个定时器,每条消息的发送取决于 secondsCounter 的模数结果。
class MessagesManager2
{
Timer _timer = new Timer();
public MessagesManager2()
{
_timer.Interval = 1000; // 1 sec
_timer.Elapsed += _timer_Elapsed;
_timer.Start();
}
int secondsCounter;
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
// send message A
if (secondsCounter % 3 == 0)
{
// send message B
}
if (secondsCounter % 5 == 0)
{
// send message C
}
}
}
哪个更好,为什么? (在性能、架构、维护、最佳实践等方面)。
【问题讨论】:
-
出于可维护性原因的选项 1,但实际上这取决于您,因为您将处理它。
-
您能否提供更多详细信息(例如,您将拥有的预期计时器数量的上限)?一般来说,越容易阅读或理解的案例越好,所以可能是您的首选。
-
没有足够的上下文来提供一个好的答案。您的第二个选择是矫枉过正。选项 #1 可以正常工作。但这就是所有可以说的。您要求讨论“为什么”?无论如何,这个问题太宽泛了,但无论如何这里都没有足够的细节来真正解决这个问题。
-
也许没有足够的信息来提供关于性能的建设性答案,但在架构、维护和最佳实践方面还有很多工作要做。
标签: c# .net architecture