عنوان:

‫بهینه‌سازی سریال‌سازی JSON با استفاده از گزینه‌های کش‌شده در حافظه


نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۱۲/۰۹ ۰۸:۴۷
آدرس: www.dntips.ir
در گذشته، XML فرمت سریال‌سازی غالب بود، اما امروزه، JSON به رایج‌ترین انتخاب برای تبادل داده تبدیل شده‌است. در زیر یک مثال معمولی از نحوه سریال‌سازی یک شیء به JSON در NET. توسط توسعه‌دهندگان آورده شده است:
JsonSerializerOptions jsonOptions = new()
{
    WriteIndented = true
};

var result = JsonSerializer.Serialize(person, jsonOptions);
در حالیکه این رویکرد به خوبی کار می‌کند، روش کارآمدتری برای سریال‌سازی اشیاء وجود دارد؛ به‌ویژه اگر در سراسر برنامه‌ی خود، اشیاء زیادی را سریال‌سازی می‌کنید. برای سرعت بخشیدن به فرآیند سریال‌سازی، بهتر است شیء JsonSerializerOptions را "کش" کنید.

کش کردن گزینه‌های سریال‌سازی

به‌جای ایجاد یک شیء JsonSerializerOptions جدید در هر بار، می‌توانیم یک فیلد static readonly را تعریف کنیم تا در چندین فراخوانی مجدد استفاده شود. این امر از تخصیص‌های غیرضروری جلوگیری می‌کند و عملکرد را بهبود می‌بخشد. در اینجا نحوه پیاده‌سازی آن آمده است:
private static readonly JsonSerializerOptions jsonWriteOptions = new()
{
    WriteIndented = true
};

مقایسه عملکرد

برای تأیید مزایای عملکرد این رویکرد، من یک مقایسه عملکرد بین روش اصلی و روش گزینه‌های کش‌شده انجام دادم. در اینجا نتایج آمده است:
  • عملکرد: استفاده از گزینه‌های کش‌شده منجر به سریال‌سازی 1.34 برابر سریع‌تر شد.
  • تخصیص حافظه: استفاده از گزینه‌های کش‌شده تخصیص حافظه را 140 بایت کاهش داد.

این نتایج نشان می‌دهد کش‌کردن گزینه‌ها می‌تواند تأثیر قابل توجهی بر سرعت و مصرف حافظه داشته باشد، به‌ویژه هنگام برخورد با عملیات سریال‌سازی مکرر.

تحلیل کد: رفع نقض‌های CA1869

با استفاده و فعال سازی نقض قانون CA1869، مواردی را که JsonSerializerOptions به طور مکرر و نامناسب ایجاد می‌شوند، علامت‌گذاری کنید. برای اطمینان از اینکه کد شما از این قانون پیروی می‌کند، فایل editorConfig. خود را برای برخورد با CA1869 به عنوان هشدار پیکربندی کنید:
dotnet_diagnostic.CA1869.severity = warning


مشاهده مطلب اصلی