我正在寻找一些关于提高代码效率的建议。我想做的是让System.Threading.Timer
每小时左右运行一些工作,工作不会很重,但我希望有一个不需要太多资源的代码。我计划在Windows服务中运行此代码。
这是我到目前为止所拥有的。
class Program
{
private static Timer timer;
static void Main(string[] args)
{
SetTimer();
}
static void SetTimer()
{
timer = new Timer(Write);
var next = DateTime.Now.AddHours(1);
var nextSync = (int)(next - DateTime.Now).TotalMilliseconds;
timer.Change(nextSync, Timeout.Infinite);
}
static void Write(object data)
{
Console.WriteLine("foo");
SetTimer(); //Call the SetTimer again for the next run.
}
}
你们觉得怎么样?我可以提高我的代码效率吗?
非常感谢所有建议!
答案 0 :(得分:4)
总分:
试试这个:
class Program
{
private static Timer timer = new Timer(Write, null, TimeSpan.FromHours(1), TimeSpan.FromHours(1));
static void Main(string[] args)
{
}
static void Write(object data)
{
Console.WriteLine("foo");
}
}
答案 1 :(得分:1)
这并不好,因为您每次迭代都会创建并放弃一个全新的计时器。移动
timer = new Timer(Write);
进入Main
以便它只执行一次,然后SetTimer
可以重复使用这个Timer对象。
答案 2 :(得分:0)
在WPF中:
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += timer_Tick;
timer.Interval = = new TimeSpan(1, 0, 0); //once an hour
timer.Start();
void timer_Tick(object sender, EventArgs e)
{
//do your updates
}