web-dev-qa-db-fra.com

Compilation longue de Visual Studio lors du remplacement de int par double

Ma copie de VS2013 Ultimate compile ce code pendant plus de 60 secondes:

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;
    }
}

Mais si je remplace double par int, il se compile immédiatement. Comment l'expliquer ...?

85
Alex Zhukovskiy

Je repro, 27 secondes sur ma machine. Le malfaiteur est MsMpEng.exe, il brûle 100% du cœur pendant aussi longtemps. Facile à voir dans l'onglet Processus du Gestionnaire des tâches.

Il s'agit du service Windows Defender, celui qui effectue réellement les analyses de logiciels malveillants. Le désactiver en décochant l'option "Activer la protection en temps réel" corrige instantanément le retard. Il en va de même pour l'ajout du chemin où je stocke les projets dans la zone "Emplacements des fichiers exclus", probablement votre approche préférée.

Je détesterais devoir deviner la raison sous-jacente, mais je dois supposer que votre code source déclenche une règle de malware. Pas une bonne explication, je ne vois pas le retard lorsque je cible une version .NET <4.0. D'accord, j'abandonne :)

139
Hans Passant