1

オブジェクトの使用が表示されるプログラムは、System.Timers.TimerCPU を非常に消費する (単一の 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のアップグレードは不可能だと思いますが、他の理由でこのバージョンを使用せざるを得ない場合は、ここでこれを行う必要があります。ソースからコンパイルすることもできます。これは、configure、make、make installと同じくらい簡単です;)

于 2012-09-11T22:17:30.797 に答える