2009-07-21 13 views
12

दुर्घटनाओं मैं, कोड का एक टुकड़ा विजुअल स्टूडियो 2008 आईडीई बहुत धीमी गति से चलाने करता है कि है स्मृति के विशाल मात्रा में उपभोग और फिर अंत में यह दुर्घटना का कारण बनता है। मुझे संदेह है कि वीएस ओएस मेमोरी सीमा को मार रहा है।नेस्टेड Linq मिन() दृश्य स्टूडियो

निम्नलिखित कोड मेरा असली आवेदन कोड नहीं है, लेकिन यह समस्या simulates। अनिवार्य रूप से मैं LINQ का उपयोग कर एक पेड़ के भीतर न्यूनतम मूल्य खोजने की कोशिश कर रहा हूं।

class LinqTest 
{ 
    public class test 
    { 
     public int val; 
     public List<test> Tests; 
    } 

    private void CrashMe() 
    { 
     test t = new test(); 

     //Uncomment this to cause the problem 
     //var x = t.Tests.Min(c => c.Tests.Min(d => d.Tests.Min(e => e.Tests.Min(f=>f.Tests.Min(g=>g.Tests.Min(h => h.val)))))); 
    } 
} 

किसी और ऐसी ही कुछ देखा है?

उत्तर

3

कुछ समय पहले मैंने bug report on MS Connect सबमिट किया था।

विजुअल स्टूडियो 2008 के लिए बग रिपोर्ट के लिए धन्यवाद: आज सुबह मैं एक प्रतिक्रिया मिल गया है!

आप एरिक Lippert के ब्लॉग से अपने लिंक किए गए पोस्ट में बाहर बिंदु के रूप में, हम समय के लिए उचित समय में इस तरह के नेस्टेड लैम्ब्डा भाव पर प्रकार निष्कर्ष करने के लिए हमारी क्षमता पर सीमा है। उस ने कहा, हम निश्चित रूप से समय-समय पर इस तरह के मुद्दे को रोकने के लिए लैम्ब्डा घोंसले पर कठोर सीमा डालने की कोशिश कर सकते हैं। दुर्भाग्यवश, हम विजुअल स्टूडियो 2010 में जो भी ठीक कर सकते हैं उस पर लॉक करना शुरू कर रहे हैं और हम इस रिलीज में ऐसी सीमाएं लागू करने में सक्षम नहीं होंगे।

भविष्य में रिलीज की योजना बनाते समय हम निश्चित रूप से इस मुद्दे को ध्यान में रखेंगे!

एलेक्स टर्नर

कार्यक्रम प्रबंधक

विजुअल C# कंपाइलर

और

निम्नलिखित प्रतिक्रिया आइटम आप Microsoft कनेक्ट पर प्रस्तुत अद्यतन किया गया है: उत्पाद/प्रौद्योगिकी - दृश्य स्टूडियो और .NET Framework - फीडबैक आईडी - 476133 फीडबैक शीर्षक - नेस्टेड लिंक मिन() क्रैश विजुअल स्टूडियो 200 8 आईडीई निम्नलिखित क्षेत्रों या मान बदल दिया है: फील्ड स्थिति के लिए [सक्रिय] से बदल दिया है [हल]

फील्ड संकल्प से [कोई नहीं] बदल करने के लिए [ठीक नहीं होगा]

3

मैं अपने विजुअल स्टूडियो 2008 स्थापित पर इस repro करने में सक्षम था। ऐसा लगता है कि भाषा सेवा अनंत लूप को मार रही है और अंत में स्मृति से बाहर हो रही है। क्या आप कनेक्ट साइट पर एक बग फाइल कर सकते हैं?

कनेक्ट: http://connect.microsoft.com

आप बग की रिपोर्ट दर्ज करते हैं, तो बग संख्या के साथ अपने जवाब के लिए एक टिप्पणी जोड़ें।

+0

मैं मूल पोस्टर के साथ काम कर रहा हूं और मेरे लॉगिन के तहत बग रिपोर्ट सबमिट कर चुका हूं: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=476133 – geofftnz

0

आपको अभी तक भी जाना नहीं है। नेस्टेड LINQ अभिव्यक्ति के d भाग में टाइप करते समय वीएस मेरे लिए जम गया। नेस्टेड लैम्ब्डा के लिए

3

प्रकार अनुमान takes exponential time भाव। तो यह आश्चर्य की बात नहीं है कि जब आप बहुत अधिक घोंसले करते हैं तो संकलक धीमा हो जाता है।

हालांकि, आईडीई आदर्श रूप से ऐसे मामलों को संभालेगा और अगर यह बहुत लंबा लगेगा तो प्रकार के अनुमान को रोक देगा।

+1

मैंने आपकी लिंक आदि टिप्पणी के रूप में जोड़ा बग रिपोर्ट पर। एमएस के लिए एनपी-हार्ड समस्या हल करने के लिए शायद यह बहुत अधिक है, लेकिन आपका टाइमआउट विचार एक अच्छा है। – geofftnz

0

सोचा था कि मैं यह इंगित करता हूं कि यह वीएस 2010 को भी फ्रीज करता है, और यह मेरे पूरे सिस्टम को लगभग जम गया है!

1

बुनियादी प्रत्यावर्तन का उपयोग के बजाय 'अनुमान' के लिए गहराई की कोशिश कर रहा, हर स्तर

public static class TestExt 
{ 
    public static int Min(this Test test) 
    { 
     return Math.Min(test.val, test.Tests.Min(x => x.Min())); 
    } 
} 
public class Test 
{ 
    public int val; 
    public List<Test> Tests; 
} 

public class LinqTest 
{ 
    public void GetMin() 
    { 
     Test t = new Test(); 
     var min = t.Min(); 
    } 
} 

के रूप में रयान Versaw द्वारा बताया पर जटिलता में वृद्धि, तो आप भी इस विस्तार के तरीकों के बिना तो जैसे कर सकते हैं:

public class Test 
{ 
    public int val; 
    public List<Test> Tests; 

    public int Min() 
    { 
     return Math.Min(val,Tests.Min(x => x.Min())); 
    } 
} 
+1

यह वही समाधान था जिसे मैंने तुरंत सोचा था। मैं इंगित करता हूं कि यह विस्तार विधि केवल तभी जरूरी है जब आपके पास अपने टेस्ट क्लास का नियंत्रण न हो (या यदि यह केवल परीक्षण के लिए उपयोग किया जाता है और सामान्य विधि के रूप में समझ में नहीं आता है)। –

0

मैं मैं सिर्फ कुछ अनुभव लगता है समान। मैं अपने कोड के माध्यम से जा रहा था और var का उपयोग उन लाइनों पर कर रहा था जहां मैं new SomeClass() पर चर घोषित कर रहा था। मेरा कोड संकलित। जब मैंने कोई विजुअल स्टूडियो 2008 यूनिट परीक्षण चलाने की कोशिश की, तो विजुअल स्टूडियो CLR20r3 के साथ त्रुटि नाम/प्रकार के रूप में क्रैश होगा। मेरे सभी var परिवर्तनों को वापस कर, परीक्षण ठीक चलते हैं।

संबंधित मुद्दे