OutOfMemoryException (32-बिट मशीन) बस के रूप में अक्सर विखंडन के बारे में है के रूप में स्मृति पर वास्तविक कठिन सीमा - आप इस बारे में बहुत सारे मिल जाएगा, लेकिन यहाँ मेरा पहला गूगल संक्षेप में चर्चा मारा है: http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx। (@ एंथनी पेग्राम ऊपर उनकी टिप्पणी में एक ही समस्या का जिक्र कर रहा है)।
यानी, एक अन्य संभावना के ऊपर अपने कोड के लिए मन में आता है है: आप सूची के लिए "IEnumerable" निर्माता का उपयोग कर रहे हैं, आप मई नहीं के आकार के रूप में वस्तु किसी भी संकेत देकर संग्रह जो आप सूची निर्माता को पास कर रहे हैं। यदि आप जिस वस्तु को पारित कर रहे हैं वह संग्रह नहीं है (ICollection
इंटरफ़ेस को लागू नहीं करता है), तो पीछे के दृश्यों को सूची कार्यान्वयन को कई (या कई) बार बढ़ने की आवश्यकता होगी, हर बार एक बहुत छोटा सरणी जो कचरा इकट्ठा करने की जरूरत है। कचरा कलेक्टर संभवतः उन त्याग किए गए सरणी को पर्याप्त तेज़ नहीं करेगा, और आपको अपनी त्रुटि मिल जाएगी।
इस के लिए सबसे सरल ठीक List(int capacity)
निर्माता का उपयोग करने के क्या समर्थन सरणी आकार आवंटित करने के लिए (भले ही आप अनुमान लगा रहे हैं और सिर्फ उदाहरण के लिए "50000" अनुमान लगा) ढांचे को बताने के लिए किया जाएगा, और उसके बाद के लिए AddRange(IEnumerable collection)
विधि का उपयोग वास्तव में अपनी सूची populate।
तो, सबसे सरल "ठीक करें" अगर मैं सही हूँ: की जगह
List<Vehicle> vList = new List<Vehicle>(selectedVehicles);
साथ
List<Vehicle> vList = new List<Vehicle>(50000);
vList.AddRange(selectedVehicles);
सभी अन्य टिप्पणी और जवाब अभी भी समग्र डिजाइन निर्णय के मामले में लागू होते हैं - लेकिन इस एक त्वरित फिक्स हो सकता है।
नोट (जैसा कि @ एलेक्स नीचे टिप्पणी की गई है), यह केवल एक मुद्दा है यदि selectedVehicles
आईसीओलेक्शन नहीं है।
'selectedVehicles' का मूल्य (और प्रकार) क्या है? – harold
जब 'आउटऑफमेमरी अपवाद' फेंक दिया गया था, तो क्या आपने डीबगर के साथ प्रक्रिया को संलग्न किया था और देखें कि समस्या क्या हो सकती है? वस्तुएं कितनी बड़ी थीं? .NET Framework में ऑब्जेक्ट आकार के लिए 2 जीबी की हार्ड सीमा है, ढांचे से खपत ओवरहेड कम से कम। –
वाहन संभवतः कक्षा के बजाय एक संरचना है? –