【发布时间】:2013-10-15 21:41:53
【问题描述】:
我正在使用 c#,据我了解(主要来自使用 c++),获取系统时间 DateTime.Now 可能会很慢。我正在尝试通过使用计时器来改进这一点/Stopwatch
class Time {
private DateTime _starttime;
private Stopwatch _timer;
public Time() {
_timer = new Stopwatch();
_starttime = DateTime.Now; //trying to improve on multiple calls to `DateTime.Now` by only calling it once
_timer.start;
}
public DateTime Now {
get { return _starttime + _timer.Elapsed; }
}
}
现在我的班级可以有一个成员private Time _time; 并在想知道当前时间的任何时候拨打_time.Now;。
我当前的时间可能会有一点偏差(我正在尝试测量延迟并想知道我是否慢了几秒钟或更长时间),但我确实希望能够查看当前时间很多系统调用不会对性能造成影响。
当我开始创建一些性能测试时,我想知道是否有人知道更好/不同的方法(或者也许有人知道我是否完全不在此列)。
【问题讨论】:
-
你从哪里听说
DateTime.Now很慢?不是。 -
@MarkB42:“每分钟 100 多条消息”是一个 很小 的数字,除非“+”真的意味着“减少了几个数量级”。你真的担心这个吗?在我的笔记本电脑上,调用
DateTime.Now1000 万 次大约需要 4 秒。调用DateTime.UtcNow1000 万次(无论如何这可能是一个更好的主意——如果可以的话,在任何地方都使用 UTC)需要 82 毫秒。仍然认为您需要优化? -
@JonSkeet 我认为 MarkB42 不需要优化。我认为他需要你的笔记本电脑。 :)
-
@MarkB42:现在是停止猜测并使用分析器的好时机。性能问题通常非常令人惊讶 - 通过测量和测试,您会比通过猜测更快地找到问题的根源,IMO。我仍然建议使用
UtcNow而不是Now,请注意...