1. ホーム
  2. c#

[解決済み] Visual Studioでintをdoubleに置き換える際の長いコンパイル時間

2023-05-16 21:31:25

質問

私のコピーの VS2013 Ultimate は、このコードを 60 秒以上コンパイルします。

class Program
{
    static void Main(string[] args)
    {
        double dichotomy = Dichotomy(
            d =>
            {
                try
                {
                    int size = (int) d;
                    byte[] b = new byte[size];
                    return -b.Length;
                }
                catch (Exception)
                {
                    return 0;
                }
            },
            0,
            int.MaxValue,
            1);

        Console.WriteLine(dichotomy);
        Console.ReadKey();
    }

    private static double Dichotomy(
        Func<double, double> func,
        double a,
        double b,
        double epsilon)
    {
        double delta = epsilon / 10;
        while (b - a >= epsilon)
        {
            double middle = (a + b) / 2;
            double lambda = middle - delta, mu = middle + delta;
            if (func(lambda) < func(mu))
                b = mu;
            else
                a = lambda;
        }
        return (a + b) / 2;
    }
}

しかし、もし私が doubleint であれば、すぐにコンパイルできます。どう説明すればいいのでしょうか...?

どのように解決するのですか?

私は、私のマシン上で27秒を再現します。 悪者は MsMpEng.exe で、これほど長い間 100% のコアを燃やします。 タスク マネージャーの [プロセス] タブで簡単に確認できます。

これは Windows Defender サービスで、実際にマルウェア スキャンを実行するものです。 リアルタイムの保護を有効にする] オプションのチェックを外して無効にすると、遅延は即座に解決されます。 また、プロジェクトを保存するパスを [除外するファイルの場所] ボックスに追加することも、おそらく推奨される方法です。

根本的な理由を推測するのは嫌ですが、ソース コードがマルウェア ルールをトリガーしていると考える必要があります。 .NET バージョン 4.0 をターゲットにした場合、遅延が発生しないのは、あまり良い説明ではありません。 わかりました、あきらめます :)