بهینه سازی استفاده از رشته در GO: استراتژی های کارآمد برای ترکیب و تبدیل با حافظه کم
در دنیای برنامه نویسی GO ، fmt.Sprintf
عملکرد اغلب به دلیل نحو آسان و انعطاف پذیری در قالب بندی انواع مختلف داده ها به کار می رود. اما این سهولت با قیمتی به وجود می آید-سربار اضافی CPU و تخصیص حافظه که همیشه ایده آل نیستند ، به خصوص هنگامی که این عملکرد به طور مکرر در حلقه ها یا در قسمت های مهم عملکرد کد شما خوانده می شود.
در این مقاله در مورد دلیل صحبت می شود fmt.Sprintf
بعضی اوقات “کیف پول شما را می شکند” ، چه گزینه هایی در دسترس است (مانند جمع بندی مستقیم و strings.Builder
) ، و هنگامی که ممکن است این گزینه ها بهتر باشد. به علاوه ، ما برخی از معیارها را برای نشان دادن تفاوت های عملکرد درج می کنیم.
چرا fmt.sprintf بی فایده به نظر می رسد؟
حتی fmt.Sprintf
استفاده از آن آسان است ، برخی از جنبه های عملکردی که باید در نظر داشته باشید وجود دارد:
- قالب تجزیه بیش از حد: هر تماس به
fmt.Sprintf
برای یافتن مکان های متغیر ، نیاز به تجزیه رشته قالب دارد. این فرآیند بار CPU اضافی را اضافه می کند.
- نوع تبدیل و استفاده از بازتاب: از آنجا که استدلال ها به صورت تصویب می شوند
interface{}
، این تابع باید تبدیل نوع را انجام دهد ، و گاهی اوقات از بازتاب استفاده می کند و آن را کندتر از روشهای خاص تر می کند.
- تخصیص حافظه: فرآیند قالب بندی پویا اغلب به تخصیص حافظه اضافی نیاز دارد ….