وقتی برنامهای دارید که پرس وجوها ساختاری مشابه را بار ها در Entity Framework Core اجرا می کند، می توانید با یک بار کامپایل کردن کوئری و اجرای چندین بار آن با پارامترهای مختلف، عملکرد را به طور مکرر افزایش دهید. به عنوان مثال، یک برنامه ممکن است مجبور باشد تمام مشتریان یک شهر خاص را بازیابی کند. شهر در زمان اجرا توسط کاربر در یک فرم مشخص می شود. برای این منظور از Compiled Query ها استفاده می شود.
Compiled Query چیست؟
Compiled Query در EF Core یک نسخه از پیش کامپایل شده یک کوئری LINQ است که برای اجرای سریعت ر در حافظه ذخیره می شود. کامپایل یک کوئری شامل تجزیه و تحلیل درخت عبارت پرس و جو و تبدیل آن به کد اجرایی است. Compiled Query می تواند منجر به بهبود عملکرد، به ویژه برای پرس و جوهای پیچیده یا مکرر شود. پرس و جوهای کامپایل شده را می توان با استفاده از متد EF.CompileQuery در EF Core ایجاد کرد. هنگامی که یک پرس و جو کامپایل شد، می توان آن را چندین بار با ارسال مقادیر پارامترهای مختلف بدون نیاز به کامپایل مجدد اجرا کرد.
Compiled Query عملکرد بیشتری نسبت به پرس و جوهای استاندارد EF دارند، زیرا می توانند از برخی بهینه سازی های اضافی بهره ببرند.
چرا Compiled Query ها سریع تر هستند؟
قبل از اینکه EF بتواند پرس و جو را به SQL معتبری که می تواند در پایگاه داده اجرا شود تبدیل کند، باید کوئری را کامپایل کند. پرس و جو کامپایل شده در حافظه کش ذخیره می شود و EF می تواند از آن پرس و جو ذخیره شده مجدد استفاده کند. در برخی شرایط، پرس و جو نیاز به کامپایل مجدد دارد و هزینه های عملکرد اضافی را به همراه دارد.
هنگامی که به طور صریح پرس و جو را با فراخوانی EF.CompileQuery کامپایل می کنیم، می توانیم از برخی تکنیک های بهینه سازی که در زمان اجرا در دسترس نیستند استفاده کنیم.
توجه داشته باشید که پرس و جوهای کامپایل شده فقط عملکرد بخش درون حافظه اجرای یک کوئری EF را بهبود می بخشد. زمان رفت و برگشت و نتایج حاصل از پایگاه داده بیتأثیر باقی میماند.
چرا باید از Compiled Query ها در EF Core استفاده کنیم؟
دلایل مختلفی وجود دارد که ممکن است بخواهید از کوئری های کامپایل شده در EF Core استفاده کنید:
- بهبود عملکرد: کامپایل یک کوئری شامل تجزیه و تحلیل درخت عبارت پرس و جو و تبدیل آن به کد اجرایی است که می تواند برای اجرای سریعتر در حافظه ذخیره شود. این موضوع می تواند منجر به بهبود عملکرد قابل توجهی شود، به خصوص برای پرس و جوهای پیچیده یا مکرر.
- کاهش مصرف حافظه: کوئری های کامپایل شده در حافظه ذخیره می شوند، بنابراین می توان آنها را چندین بار بدون نیاز به کامپایل مجدد اجرا کرد. این موضوع می تواند به کاهش استفاده از حافظه و بهبود مقیاس پذیری برنامه کمک کند.
- نگهداری آسان تر: کوئری های کامپایل شده می توانند کد شما را با جدا کردن منطق پرس و جو از منطق برنامه قابل نگهداری تر کنند. این موضع می تواند درک و دیباگ کد شما را آسان تر کند و همچنین می تواند به شما در جلوگیری از مشکلات رایج عملکرد کمک کند.
- امنیت بهبود یافته: هنگامی که از کوئری های کامپایل شده استفاده می کنید، می توانید منطق پرس و جو را در زمان کامپایل اعتبار سنجی کنید، که می تواند به جلوگیری از حملات SQL injection و سایر آسیب پذیری های امنیتی کمک کند.
توجه به این نکته مهم است که اگرچه کوئری های کامپایل شده می توانند عملکرد را بهبود بخشند و قابلیت نگهداری کد شما را بالاتر ببرند، اما محدودیت هایی نیز دارند. به عنوان مثال، آنها را نمی توان با پرس و جوهای ایجاد شده به صورت پویا یا با پرس و جوهایی که از اینترفیس IQueryable در EF Core استفاده می کنند، استفاده کرد.
ما در این دوره، نحوه ایجاد و استفاده از Compiled Query ها را در .net7 و EF Core 7 آموزش خواهیم داد و سپس از عمکلرد آن با استفاده از کتابخانه BenchmarkDotNet بنچمارک خواهیم گرفت.
دریافت سورس پروژه آموزش استفاده از CompiledQuery در .Net7 و EF Core 7
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید