সুতরাং আমি উত্সটিতে গিয়েছিলাম এবং দেখে মনে হচ্ছে যে অলসতা ডাবল বাইট অক্ষর পরিচালনা করছে। মূলত, পড়া প্রতিটি চরিত্রের জন্য, এটিকে mbrtowc()
একটি বিস্তৃত চরিত্রে রূপান্তরিত করার চেষ্টা করার জন্য কল করতে হবে, তারপরে সেই প্রশস্ত চরিত্রটি এটি কোনও শব্দের বিভাজক, লাইন বিভাজক, ইত্যাদি আছে কিনা তা পরীক্ষা করে দেখা হয় is
প্রকৃতপক্ষে, যদি আমি LANG
ডিফল্ট থেকে আমার স্থানীয় ভেরিয়েবলটি পরিবর্তন করি en_US.UTF-8
(ইউটিএফ -8 একটি মাল্টবাইট অক্ষর সেট) এবং এটিতে " C
" সেট করে রাখে (সাধারণ একক বাইট অক্ষর সেট), wc
একক বাইট অপ্টিমাইজেশান ব্যবহার করতে সক্ষম হয়, যা এটির গতি যথেষ্ট বাড়িয়ে তোলে, আগের হিসাবে প্রায় এক চতুর্থাংশ গ্রহণ।
অতিরিক্তভাবে, এটি কেবল প্রতিটি অক্ষর যদি শব্দ ( -w
), লাইন দৈর্ঘ্য ( -L
) বা অক্ষর ( -m
) গণনা করে তবে তা পরীক্ষা করতে হবে । এটি শুধুমাত্র বাইট এবং / অথবা লাইন গন্য করছে, এটা ওয়াইড চরিত্র হ্যান্ডলিং এড়িয়ে যেতে পারেন এবং তারপর অত্যন্ত দ্রুত রান - যতো তাড়াতাড়ি md5sum
।
আমি এটা মাধ্যমে দৌড়ে gprof
, এবং ফাংশন যে multibyte অক্ষর (হ্যান্ডেল করতে ব্যবহার করা হয় mymbsinit()
, mymbrtowc()
, myiswprint()
, ইত্যাদি) সঞ্চালনের সময় একা 30%, এবং কোড সম্পর্কে গ্রহণ করছেন যে বাফার মাধ্যমে পদক্ষেপ আরো অনেক জটিল কারণ এটি আছে পরিবর্তনশীল আকারের অক্ষরের জন্য বাফারের মাধ্যমে পরিবর্তনশীল আকারের পদক্ষেপগুলি হ্যান্ডেল করুন পাশাপাশি বাফারের শুরুতে বাফারটিকে ছড়িয়ে দেওয়া কোনও আংশিকভাবে সম্পন্ন অক্ষরগুলি পূরণ করুন যাতে এটি পরের বারের মতো পরিচালনা করা যায়।
এখন আমি কী কী সন্ধান করতে হবে তা জানতে পেরে আমি কয়েকটি ইউটিলিটি সহ utf-8 আস্তে উল্লেখ করে কিছু পোস্ট পেয়েছি:
/programming/13913014/grepping-a-huge-file-80gb-any-way-to-speed-it-up
http://dtrace.org/blogs/brendan/2011/12/08 / 2000x ক্ষমতা সম্পন্ন, জয় /