डबल के साथ int की जगह जब दृश्य स्टूडियो लंबा संकलन


86

VS2013 अल्टीमेट की मेरी कॉपी 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करता हूं , तो यह तुरंत संकलन करता है। यह कैसे समझाया जा सकता है ...?


दोनों प्रकार के डेटा के लिए मेरी मशीन पर तुरंत संकलन करता है ... आप किस मशीन पर इसे संकलित कर रहे हैं?
क्रिस मेंटल

1
मेरी पहली टिप्पणी खरोंच; मैं वही व्यवहार देख रहा हूं। ~ 15 सेकंड के साथ doubleऔर तुरंत साथ int। ३.४ गज़ मशीन।
केविन रिचर्डसन

दिलचस्प। मैंने अपने संस्करण की जाँच की और मैं वास्तव में VS2013 प्रीमियम चला रहा हूं - मुझे लगा कि मैं अंतिम रूप से स्थापित हो गया हूं। शायद यह सिर्फ अंतिम संस्करण है जो इसके साथ होता है।
क्रिस मेंटल

1
@chris बस उस परिकल्पना का समर्थन करने के लिए, वीएस एक्सप्रेस 2013 / विंडोज डेस्कटॉप इसे ठीक ठीक संकलित करता है।
क्लिक करें

5
मैंने जो सुना है, "VS2013 बहुत अजीब व्यवहार" शायद ही एक विषमता है। :)
ऑर्बिट

जवाबों:


140

मैं repro, मेरी मशीन पर 27 सेकंड। बुराई करने वाला MsMpEng.exe है, यह उस लंबे समय तक 100% कोर को जलाता है। टास्क मैनेजर की प्रक्रियाओं टैब में देखने के लिए आसान है।

यह विंडोज डिफेंडर सेवा है, जो वास्तव में मैलवेयर स्कैन करता है। "वास्तविक समय की सुरक्षा चालू करें" विकल्प को अनसुना करके इसे अक्षम करना तुरंत देरी को ठीक करता है। तो उस पथ को जोड़ देता है जहाँ मैं प्रोजेक्ट्स को "बहिष्कृत फ़ाइल स्थानों" बॉक्स में रखता हूँ, शायद आपका पसंदीदा तरीका।

मुझे अंतर्निहित कारण पर अनुमान लगाने से नफरत होगी, लेकिन यह मानना ​​होगा कि आपका स्रोत कोड एक मैलवेयर नियम को ट्रिगर कर रहा है। एक महान विवरण नहीं है, मैं देरी नहीं देखता जब मैं एक .NET संस्करण <4.0 को लक्षित करता हूं। ठीक है, मैं हार गया :)


4
Omg, Microsoft, आप मुझसे मजाक कर रहे हैं ... Tnx मदद के लिए, यह सही मायने में है MSSEऔर .Net 4.0+अपराधी कौन हैं
एलेक्स ज़ुकोवस्की

3
अच्छी पकड़! मैं सोच रहा हूं कि वास्तव में समस्या क्या है (विशेषकर एक कार्यक्रम के लिए जो इतना सरल है और इसमें लगभग बाहरी निर्भरता नहीं है)। क्या यह संभव होगा कि परिणाम से एमएसआईएल बाइट्स मालवेयर के पैटर्न की तरह दिखाई देगा और इस तरह MsMpEnd में आग लग जाएगी?
टाइगरो

-1

मैं आधिकारिक तौर पर यह नहीं कह सकता क्योंकि विधानसभा कोड स्तर पर मुझे फेल हुए 20+ साल हो गए हैं, लेकिन मैं आसानी से इस पर विश्वास कर सकता हूं।

IEEE मानक फ़्लोटिंग पॉइंट ऑप्स और एक प्रोसेसर द्वारा लागू किए गए लोगों के बीच अंतर अक्सर अनुवाद करने के लिए लाइब्रेरी रूटीन में लिंक करने के लिए मजबूर करता है, जबकि पूर्णांक गणित केवल सीपीयू निर्देशों का उपयोग कर सकता है। जिस समय IEEE ने मानक को परिभाषित किया, उन्होंने कुछ विकल्प बनाए जो कार्यान्वयन में बहुत ही असामान्य थे, और विशेष रूप से बहुत पहले माइक्रोकोड में लागू करने के लिए बहुत अधिक महंगे थे, और निश्चित रूप से वर्तमान पीसी सिस्टम 80387 और 80486 से चिपके हुए लगभग आस-पास निर्मित हैं। , जो मानक का अनुमान लगाते हैं।

इसलिए यदि मैं सही हूं, तो बढ़ा हुआ समय है क्योंकि इसमें लिंक में लाइब्रेरी कोड का एक हिस्सा जोड़ना शामिल है, और लिंकिंग बिल्ड समय का एक बड़ा हिस्सा है जो कि गुणात्मक रूप से बढ़ने के लिए जाता है क्योंकि रिलोसेबल चंक्स जोड़े जाते हैं।

लिनक्स पर क्लैंग समान मंदी हो सकती है या नहीं; अगर यह इसे टालता है, और मेरे अनुमान को और भी आगे बढ़ाता है, तो यह सर्वव्यापी साझा-मेमोरी libc की एक कलाकृति होगी जो आपको वहां मिलती है और इसके चारों ओर लिंकर अनुकूलन होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.