Yetim dasturchi kundaligi dan repost
Nima uchun c#, c++dan ko'ra tezroq ishlaydi?
c# c++ asosida qilingan bo'lsada ammo ba'zi operatsiyalarda o'zidan quyida turuvchi tildan tezroq ishlaydi. Aslida ham shundaymi? Agarda ishlash prinsipiga qarasak ha, ammo dasturchi tajribasidan kelib chiqsak unday emas.
c++ kiritish va chiqarish operatsiyalarida turli xil metodlarni ishlatadi. Odatda dasturchining bunga e'tiborsizligi dastur ishlashiga turlicha ta'sir o'tkazishi mumkin.
Bunga ko'ra c# ko'p hollarda i/o operatsiyalar uchun .NET Corega murojaat qiladi. .NET bo'lsa ushbu ishni amalga oshirish uchun juda yaxshi optimizatsiya qilingan.
C++ bo'lsa kompilyatorning odatiy sozlamalari bilan katta kirish va chiqish ma'lumotlari uchun moslashmagan. Chunki c++ odatiy sozlamalarda stio bilan sinxronizatsiya qilishga urinadi va bu operatsiyalar hajmining bir barobar oshishiga olib keladi. Sinxronizatsiya har sahar buferni o'qish va o'chirishga uringani sababli orada tezlik pasayishiga olib keladi.
Muammoning oddiy yechimi sinxronizatsiyani o'chirish:
std::ios::sync_with_stdio(false);
Shuningdek qator tugallanishi uchun ham std::endl o'rniga \n belgilaridan foydalanish maqsadga muvofiq hisoblanadi. Chunki std::endl har doim buferni tozalashga urinadi.
os.put(os.widen('\n'));
os.flush()
c# c++ asosida qilingan bo'lsada ammo ba'zi operatsiyalarda o'zidan quyida turuvchi tildan tezroq ishlaydi. Aslida ham shundaymi? Agarda ishlash prinsipiga qarasak ha, ammo dasturchi tajribasidan kelib chiqsak unday emas.
c++ kiritish va chiqarish operatsiyalarida turli xil metodlarni ishlatadi. Odatda dasturchining bunga e'tiborsizligi dastur ishlashiga turlicha ta'sir o'tkazishi mumkin.
Bunga ko'ra c# ko'p hollarda i/o operatsiyalar uchun .NET Corega murojaat qiladi. .NET bo'lsa ushbu ishni amalga oshirish uchun juda yaxshi optimizatsiya qilingan.
C++ bo'lsa kompilyatorning odatiy sozlamalari bilan katta kirish va chiqish ma'lumotlari uchun moslashmagan. Chunki c++ odatiy sozlamalarda stio bilan sinxronizatsiya qilishga urinadi va bu operatsiyalar hajmining bir barobar oshishiga olib keladi. Sinxronizatsiya har sahar buferni o'qish va o'chirishga uringani sababli orada tezlik pasayishiga olib keladi.
Muammoning oddiy yechimi sinxronizatsiyani o'chirish:
std::ios::sync_with_stdio(false);
Shuningdek qator tugallanishi uchun ham std::endl o'rniga \n belgilaridan foydalanish maqsadga muvofiq hisoblanadi. Chunki std::endl har doim buferni tozalashga urinadi.
os.put(os.widen('\n'));
os.flush()