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;
}
}
しかし、double
をint
に置き換えると、すぐにコンパイルされます。どのように説明できますか...?
私は自分のマシンで27秒間再現します。悪意のあるユーザーはMsMpEng.exeで、その間100%コアを焼きます。タスクマネージャーの[プロセス]タブで簡単に確認できます。
これはWindows Defenderサービスで、実際にマルウェアスキャンを実行します。 [リアルタイム保護を有効にする]オプションをオフにして無効にすると、遅延が即座に修正されます。また、プロジェクトを保存するパスを[除外されたファイルの場所]ボックスに追加することもできます。
根本的な理由を推測する必要はありませんが、ソースコードがマルウェアルールをトリガーしていると想定する必要があります。すばらしい説明ではありませんが、.NETバージョン<4.0を対象とした場合の遅延はわかりません。さて、私はあきらめます:)