glob
पहले सभी संभव फ़ाइल नाम विस्तार बनाता है, इसलिए यह पहली बार होगा पूरी सूची उत्पन्न खोल शैली ग्लोब / पैटर्न यह दिया जाता है से। इसके बाद ही इस पर पुनरावृत्ति होगी, यदि इसे स्केलर संदर्भ में उपयोग किया जाता है। यही कारण है कि यह थकाऊ से बाहर निकलने के बिना भागने के लिए इतना कठिन (असंभव) है; इस पोस्ट को देखें ।
आपके पहले उदाहरण में वह 26 5 स्ट्रिंग्स ( 11_881_376
) है, प्रत्येक पाँच वर्ण लंबा है। तो 56Mb से अधिक (भोले) कुल के साथ ~ 12 मिलियन स्ट्रिंग्स की एक सूची ... प्लस एक स्केलर के लिए ओवरहेड, जो मुझे लगता है कि न्यूनतम 12 बाइट्स या ऐसा है। तो 100Mb के आदेश पर, बहुत कम से कम, एक सूची में वहीं। †
मैं पर्ल (रेगेक्स के अलावा) में चीजों की लंबाई पर किसी भी औपचारिक सीमा के बारे में नहीं जानता हूं, लेकिन glob
क्या यह सब आंतरिक रूप से होता है और इसमें अनजाने की सीमाएं होनी चाहिए - शायद कुछ बफ़र आंतरिक रूप से कहीं उग आए हैं? यह थोड़ा ज्यादा है।
इसके चारों ओर एक रास्ते के लिए - 5-चार तार की उस सूची को पुनरावृति से उत्पन्न करें, बजाय glob
इसके कि पर्दे के पीछे अपना जादू चला दें। तो फिर यह बिल्कुल एक समस्या नहीं होनी चाहिए।
हालांकि, मुझे आराम के लिए पूरी बात थोड़ी बड़ी लगती है, उस मामले में भी। मैं वास्तव में एक एल्गोरिथ्म लिखने की सलाह दूंगा जो एक समय में एक सूची तत्व प्रदान करता है (एक "पुनरावृत्त"), और उसी के साथ काम करता है।
कुछ अच्छे पुस्तकालय हैं जो ऐसा कर सकते हैं (और भी बहुत कुछ), जिनमें से कुछ एल्गोरिथम हैं: इस मामले पर पिछली पोस्ट में (और एक टिप्पणी में) लूप्स की सिफारिश की गई, एल्गोरिथ्म :: कॉम्बिनेटरिक्स (एक ही टिप्पणी), Set::CrossProduct
एक अन्य उत्तर से यहाँ ...
यह भी ध्यान दें कि, जबकि यह एक चतुर उपयोग है glob
, पुस्तकालय फाइलों के साथ काम करने के लिए है। सिद्धांत रूप में इसका दुरुपयोग करने के अलावा, मुझे लगता है कि यह वैध प्रविष्टि के लिए प्रत्येक (~ 12 मिलियन) नामों की जांच करेगा ! ( इस पृष्ठ को देखें ।) यह बहुत सारे अनावश्यक डिस्क का काम है। (और यदि आप "ग्लब्स" का उपयोग करना चाहते थे जैसे *
या ?
कुछ सिस्टम पर यह केवल उन स्ट्रिंग के साथ एक सूची देता है जिसमें वास्तव में फाइलें होती हैं, तो आप चुपचाप अलग परिणाम प्राप्त करेंगे।)
† मुझे 5-चार स्केलर के आकार के लिए 56 बाइट्स मिल रहे हैं। हालांकि यह एक घोषित चर के लिए है, जो कि गुमनाम स्केलर से थोड़ा अधिक हो सकता है, परीक्षण कार्यक्रम में लंबाई -4 स्ट्रिंग्स के साथ वास्तविक कुल आकार वास्तव में भयावह गणना की तुलना में बड़ा परिमाण का एक अच्छा क्रम है। तो असली बात अच्छी तरह से 1Gb के आदेश पर हो सकती है, एक ऑपरेशन में।
अद्यतन एक साधारण परीक्षण प्रोग्राम जो 5-चार लंबी स्ट्रिंग्स की सूची बनाता है (उसी glob
दृष्टिकोण का उपयोग करके ) सर्वर-क्लास मशीन पर 15-ईश मिनट के लिए चला और 725 एमबी मेमोरी ले गया।
यह इस सर्वर पर वास्तविक 5-चार लंबी स्ट्रिंग्स की उचित संख्या, प्रतीत होता है कि सही था।