2014-06-07 13 views
28

Moja kopia VS2013 Ostatecznego kompiluje kod dla 60+ sekund:Visual Studio i MSSE antywirusowego błąd kompilacji czas

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

Ale jeśli mogę wymienić double z int, kompiluje natychmiast. Jak to wyjaśnić ...?

+0

Kompiluje się natychmiast na moim komputerze, dla obu typów danych ... Na jakiej maszynie to kompilujesz? –

+0

Zdrap mój pierwszy komentarz; Widzę to samo zachowanie. ~ 15 sekund z 'podwójnym' i natychmiastowym z' int'. Maszyna 3,4 Ghz. –

+0

Interesujące. Sprawdziłem wersję i faktycznie używam wersji VS2013 Premium - myślałem, że zainstalowałem Ultimate. Być może jest to tylko wersja Ultimate, z którą to się zdarza. –

Odpowiedz

34

I repro, 27 sekund na mojej maszynie. Zło-sprawcą jest MsMpEng.exe, spala 100% rdzeń przez tak długi czas. Łatwo zobaczyć na karcie Procesy Menedżera zadań.

To jest usługa Windows Defender, która faktycznie wykonuje skanowanie szkodliwego oprogramowania. Wyłączenie go poprzez odznaczenie opcji "Włącz ochronę w czasie rzeczywistym" natychmiast naprawia opóźnienie. Czyli dodanie ścieżki, w której przechowuję projekty, do pola "Wykluczone lokalizacje plików", prawdopodobnie preferowanego podejścia.

Nie chciałbym zgadywać, dlaczego tak jest, ale trzeba założyć, że kod źródłowy uruchamia regułę szkodliwego oprogramowania. Nie jest to świetne wyjaśnienie, nie widzę opóźnienia, gdy celuję w .NET wersję < 4.0. Okay, poddaję się :)

+0

Omg, Microsoft, żartujesz mi ... Tnx za pomoc, to naprawdę 'MSSE' i' .Net 4.0 + ', którzy są winowajcami –

+0

Dobry połów! Zastanawiam się, co dokładnie powoduje problem (szczególnie dla programu, który jest tak prosty i zawiera prawie nie zewnętrzne zależności). Czy byłoby możliwe, że wynik kompilacji bajtów MSIL będzie wyglądał dokładnie jak wzorzec znanego szkodliwego oprogramowania, a zatem MsMpEnd zostanie uruchomiony? – tigrou

Powiązane problemy