यह एक आम ज्ञान है कि कोई Haskell में बड़ी मात्रा में डेटा पढ़ने के लिए [Char]
का उपयोग नहीं करता है। नौकरी करने के लिए ByteString
एस का उपयोग करता है। इसके लिए सामान्य स्पष्टीकरण यह है कि Char
एस बड़े हैं और सूचियां उनके ऊपरी हिस्से को जोड़ती हैं।हास्केल में [चार] आधारित आउटपुट की तुलना में [चार] आधारित इनपुट इतना धीमा क्यों है?
हालांकि, यह आउटपुट के साथ कोई समस्या नहीं प्रतीत होता है।
उदाहरण के लिए निम्नलिखित कार्यक्रम:
import Data.List
sum' :: [Int] -> Int
sum' = foldl' (+) 0
main = interact $ show . sum' . map read . words
3,38 सेकंड लेता है, तो पहला कार्यक्रम के उत्पादन में खिलाया:
main = interact $ const $ unwords $ map show $ replicate 500000 38000000
जबकि निम्न में से एक, अपने कंप्यूटर पर चलाने के लिए सिर्फ 131 एमएस लेता है एक इनपुट के रूप में!
String
एस का उपयोग करके इनपुट और आउटपुट प्रदर्शन के बीच ऐसी असमानता का कारण क्या है?
मेरी त्वरित प्रोफाइलिंग से पता चलता है कि इनपुट प्रोग्राम आउटपुट प्रोग्राम की तुलना में 13 गुना अधिक स्मृति आवंटित करता है। यह निश्चित रूप से असमानता में योगदान देता है। –