کلاس SearchValues جدید از بردارسازی و شتاب سخت افزاری برای سرعت بخشیدن به جستجوهای مکرر در NET 8 بهره می برد.
با انتشار .NET 8، مایکروسافت مجموعه ای از ویژگی ها و پیشرفت های جدید را در چارچوب های NET Core و ASP.NET Core معرفی کرد. یکی از این ویژگیها کلاس SearchValues است که گام مهمی در واکشی کارآمد دادهها از مجموعه دادهها را نشان میدهد.
SearchValues نوع جدیدی است که در NET 8 برای بهبود عملکرد برنامه طراحی شده است. با استفاده از تکنیکهای بهینهسازی مانند برداری و شتاب سختافزاری، SearchValues افزایش سرعت را ارائه میکند در حالی که بهطور یکپارچه با NET Core و ASP.NET Core ترکیب میشود.
در این مقاله توضیح خواهیم داد که چگونه می توانید از SearchValues برای بهبود سرعت جستجو در برنامه های NET Core استفاده کنید.
یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید
ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را برای ایجاد یک پروژه برنامه کاربردی کنسول NET Core جدید دنبال کنید.
- Visual Studio IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
- بعدی را کلیک کنید.
- در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، «.NET 8.0 (پشتیبانی طولانی مدت)» را به عنوان نسخه چارچوبی که می خواهید استفاده کنید، انتخاب کنید.
- روی ایجاد کلیک کنید.
ما از این پروژه برنامه کاربردی کنسول NET 8 برای کار با نمونههای کد نشان داده شده در بخشهای بعدی این مقاله استفاده خواهیم کرد.
جستجوی عملکرد جستجوی رشته
جستجوهای رشته ای بخش اساسی بسیاری از برنامه ها هستند. در حالی که چندین روش برای جستجوی رشته ها وجود دارد، یافتن کارآمدترین روش در هر مورد می تواند چالش برانگیز باشد. برای مثال، در حالی که میتوانید از متد IndexOfAny() برای جستجوی اولین رخداد یک کاراکتر در یک رشته استفاده کنید، ممکن است این روش برای جستجوهای بعدی که دادههای ورودی متفاوت است، بهترین روش نباشد.
کد زیر را در نظر بگیرید که نشان میدهد چگونه میتوانید با استفاده از متد IndexOfAny() در یک رشته جستجو کنید.
string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; char[] c = {'s'}; int indexOfAlpha = str.IndexOfAny(c);
اگر بعداً میخواهید بیش از یک کاراکتر در یک رشته جستجو کنید، به استراتژی جستجوی متفاوتی نیاز دارید، همانطور که در قطعه کد زیر نشان داده شده است.
string numeric = "0123456789"; int indexOfAlphaNumeric = str.IndexOfAny(numeric.ToCharArray()); Console.WriteLine(indexOfAlpha); Console.WriteLine(indexOfAlphaNumeric);
توجه داشته باشید که ما عدد رشته را به آرایه ای از کاراکترها تبدیل کرده ایم زیرا متد IndexOfAny() به یک آرایه کاراکتری به عنوان پارامتر نیاز دارد. اگر بخواهیم طیفی از کاراکترها را جستجو کنیم، باید از یک رشته یا یک کاراکتر[] استفاده کنیم.
SearchValues این انواع مختلف جستجوها را هم برای کدگذاری سادهتر و هم سریعتر اجرا میکند. به این دلیل که SearchValues از پشتیبانی پردازش برداری در CPUهای امروزی بهره می برد که می توانند چندین مقدار را به صورت موازی پردازش کنند.
SearchValues چیست؟
SearchValues نوع جدیدی در فضای نام System.Buffers در دات نت است که از بردارسازی و شتاب سخت افزاری برای بهبود کارایی و عملکرد جستجو استفاده می کند. کلاس SearchValues
شما میتوانید از SearchValues
کد زیر را در نظر بگیرید.
SearchValues<char> searchValues = SearchValues.Create("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); bool IsAlphanumericContent(ReadOnlySpan<char> text) => text.IndexOfAny(searchValues) != -1 ? true:false;
می توانید با استفاده از کد زیر، روش IsAlphanumericContent() را برای بررسی اینکه آیا پارامتر حاوی متن الفبایی عددی است فراخوانی کنید.
Console.WriteLine(IsAlphanumericContent("This is an alphanumeric text for demonstration purposes 0nly."));
توجه داشته باشید که نوع SearchValues برای جستجوی اولین وقوع یک مقدار خاص در یک مجموعه طراحی شده است.
وقتی از SearchValues در کد خود استفاده می کنید، زمان اجرا یک پیاده سازی بهینه را برای سناریوی خاص تعیین می کند. به عنوان مثال، در مورد خط کد زیر، SearchValues یک محدوده پیوسته از مقادیر را جستجو می کند و یک پیاده سازی بهینه را برای آن مورد استفاده تعیین می کند.
SearchValues<char>.Create("12345");
دستاوردهای عملکردی که با SearchValues به دست می آورید به داده های ورودی و نوع و حجم داده های جستجو شده بستگی دارد. با افزایش حجم دادهها، میتوانید انتظار مزایای عملکرد قابل توجهتری داشته باشید.
محک زدن عملکرد جستجو در NET
کد زیر نشان میدهد که چگونه میتوانید تستهای معیار را برای مقایسه عملکرد روش IndexOfAny با استفاده از یک آرایه کاراکتری در مقابل استفاده از SearchValues اجرا کنید.
[MemoryDiagnoser] public class PerformanceBenchmark { private char[] charValues = { 's', 'a', 'm', 'p', 'l', 'e' }; private SearchValues<char> searchValues = SearchValues.Create("sample"); private string text = "this text is in lower case for testing purposes only"; [Benchmark] public int IndexOfCharBenchmark() { return text.AsSpan().IndexOfAny(charValues); } [Benchmark] public int IndexOfSearchValuesBenchmark() { return text.AsSpan().IndexOfAny(searchValues); } }
برای اجرای تستهای معیار بالا، باید کد زیر را در Program.cs خود مشخص کنید.
using BenchmarkDotNet.Running; using SearchValuesDemo; var summary = BenchmarkRunner.Run<PerformanceBenchmark>();
شکل ۱ تفاوت عملکرد این دو رویکرد را هنگام اجرای معیارها در پنجره کنسول نشان میدهد.
شکل ۱. SearchValues برنده است!
همانطور که از دادههای معیار میبینید، هنگام استفاده از SearchValues، عملکرد قابل توجهی افزایش مییابد.
معرفی SearchValues در .NET 8 نشان دهنده یک تغییر الگو در کارایی جستجوی مقادیر در مجموعه ای از داده ها است. System.Buffers.SearchValues
پست های مرتبط
سرعت جستجو را با استفاده از SearchValues در NET افزایش دهید
سرعت جستجو را با استفاده از SearchValues در NET افزایش دهید
سرعت جستجو را با استفاده از SearchValues در NET افزایش دهید