1

我注意到System.Timers.Timer出现对象使用的程序非常消耗 CPU(单 CPU 内核几乎 100%)。

我使用的是 Ubuntu 11.10,这是我的单声道版本:

mono -V
Mono JIT compiler version 2.10.5 (Debian 2.10.5-1)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            Included Boehm (with typed GC and Parallel Mark)

这是示例程序,它会导致意外的高 CPU 使用率:

using System;
using System.Timers;

namespace MonoCPUTest
{
    class Program
    {
        static Timer _refresh = new Timer();

        static void Main(string[] args)
        {
            _refresh.Interval = 2000;
            _refresh.AutoReset = true;
            _refresh.Elapsed += (x, y) => refresh();
            _refresh.Start();

            while (true)
            {
                Console.WriteLine("loop");
                System.Threading.Thread.Sleep(10000);
            }
        }
        static void refresh()
        {
            Console.WriteLine("refresh");
        }
    }
}

非常感谢您的帮助。

4

1 回答 1

1

我刚刚测试过(通过复制粘贴、编译和执行您的代码)并且无法重现该问题,CPU 负载约为 0。我正在使用较新版本的 Mono,特别是几天前从 git 树编译的版本;所以如果有这样的问题,它是固定的。

我猜想如果没有外部 PPA,升级你的 Mono 是不可能的,但如果你没有因为其他原因被迫使用这个版本,这就是应该做的。您也可以从源代码编译一个,就像配置、制作、安装一样简单;)

于 2012-09-11T22:17:30.797 回答