2014-06-07 4 views
28

Meine Kopie von VS2013 Ultimative diesen Code für 60+ Sekunden kompiliert:Visual Studio und MSSE Anti-Virus-Kompilierung Fehler

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

Aber wenn ich double mit int ersetzen, es kompiliert sofort. Wie kann es erklärt werden ...?

+0

Kompiliert sofort auf meiner Maschine, für beide Datentypen ... Auf welcher Maschine kompilieren Sie es? –

+0

Scratch meinen ersten Kommentar; Ich sehe das gleiche Verhalten. ~ 15 Sekunden mit 'double' und instant mit' int'. 3.4Ghz Maschine. –

+0

Interessant. Ich überprüfte meine Version und ich lief tatsächlich VS2013 Premium - dachte ich hätte Ultimate installiert. Vielleicht ist es nur die Ultimate-Version, mit der dies geschieht. –

Antwort

34

Ich Repro, 27 Sekunden auf meiner Maschine. Der Übeltäter ist MsMpEng.exe, es brennt 100% lang so lange. Auf der Task-Manager-Registerkarte Prozesse leicht zu sehen.

Dies ist der Windows Defender-Dienst, der die Malware-Scans durchführt. Durch Deaktivieren der Option "Echtzeitschutz aktivieren" wird die Verzögerung sofort behoben. Das Hinzufügen des Pfads, in dem Projekte gespeichert werden, in das Feld "Ausgeschlossene Dateispeicherorte", ist wahrscheinlich Ihr bevorzugter Ansatz.

Ich hasse es, den zugrunde liegenden Grund erraten zu müssen, muss aber davon ausgehen, dass Ihr Quellcode eine Malware-Regel auslöst. Keine gute Erklärung, ich sehe nicht die Verzögerung, wenn ich eine .NET-Version < 4.0 targetiere. Okay, ich gebe auf :)

+0

Omg, Microsoft, du machst Witze ... Tnx für Hilfe, es ist wirklich 'MSSE' und' .Net 4.0 + 'Wer sind Schuldige –

+0

Guter Fang! Ich frage mich, was genau das Problem verursacht (besonders für ein Programm, das so einfach ist und fast keine externen Abhängigkeiten enthält). Wäre es möglich, dass das Ergebnis MSIL-Bytes aus der Kompilierung genau wie ein Muster einer bekannten Malware aussieht und somit MsMpEnd hochfährt? – tigrou