عملکرد برنامه

کتابخانه کلاینت Google Ads .NET تعاملات برنامه شما با API گوگل ادز را با حداقل پیکربندی از جانب شما ساده می‌کند. با این حال، عملکرد کلی به شدت به نحوه استفاده و ادغام کتابخانه با برنامه شما بستگی دارد.

این راهنما بهینه‌سازی‌های عملکردی مختص برنامه‌های .NET را پوشش می‌دهد و بهترین شیوه‌هایی را که عموماً برای API تبلیغات گوگل قابل اجرا هستند، تکمیل می‌کند.

هر زمان که ممکن است، از GoogleAdsClient دوباره استفاده کنید

GoogleAdsClient هنگام برقراری تماس‌های API، جلسه کاربر را نشان می‌دهد. این سرویس بهینه‌سازی‌هایی مانند موارد زیر را ارائه می‌دهد:

  • ذخیره کانال‌های gRPC مورد استفاده توسط سرویس‌های API. این کار زمان راه‌اندازی هنگام فراخوانی‌های اولیه API را کاهش می‌دهد.
  • در صورت امکان، از توکن‌های دسترسی دوباره استفاده کنید. این کار تعداد رفت و برگشت‌هایی را که کتابخانه کلاینت Google Ads .NET باید برای به‌روزرسانی توکن‌های دسترسی انجام دهد، کاهش می‌دهد.

در صورت امکان از توکن‌های دسترسی از حساب کاربری سطح مدیر استفاده کنید.

اگر یک توکن دسترسی در سطح حساب مدیر دارید، می‌توانید از آن برای برقراری تماس‌های API در برابر همه حساب‌های کاربری گوگل ادز تحت آن سلسله مراتب حساب استفاده کنید. این امر هنگامی که با استفاده مجدد از نمونه‌های GoogleAdsClient ترکیب شود، می‌تواند تعداد رفت و برگشت‌هایی را که کتابخانه کلاینت باید برای به‌روزرسانی توکن‌های دسترسی انجام دهد، بیشتر کاهش دهد.

هر زمان که ممکن است به جای جستجو از SearchStream استفاده کنید

رابط برنامه‌نویسی کاربردی گوگل ادز دو روش اصلی برای بازیابی اشیاء ارائه می‌دهد: GoogleAdsService.Search (که از صفحه‌بندی استفاده می‌کند) و GoogleAdsService.SearchStream (که از پخش جریانی استفاده می‌کند).

در حالی که Search چندین درخواست صفحه‌بندی شده برای دانلود کل گزارش ارسال می‌کند، SearchStream یک درخواست واحد ارسال می‌کند و صرف نظر از اندازه گزارش، یک اتصال پایدار با API گوگل ادز برقرار می‌کند. SearchStream با حذف زمان رفت و برگشت شبکه مورد نیاز برای درخواست هر صفحه جداگانه از پاسخ Search ، عموماً عملکرد بهتری نسبت به صفحه‌بندی ارائه می‌دهد. برای کسب اطلاعات بیشتر در مورد زمان انتخاب هر روش، به راهنمای گزارش‌های استریمینگ مراجعه کنید.

مدیریت دستی به‌روزرسانی‌های توکن دسترسی

در برخی محیط‌های بدون وضعیت مانند توابع ابری گوگل ، ممکن است استفاده مجدد از نمونه‌های GoogleAdsClient در فراخوانی‌های مختلف امکان‌پذیر نباشد. چنین محیط‌هایی بهترین شیوه‌های خود را برای حفظ و استفاده مجدد از داده‌ها دارند.

در Google.Ads.GoogleAds v27.0.0 و بالاتر ، می‌توانید نمونه ICredential از پیش پیکربندی‌شده خود را مستقیماً با استفاده از ویژگی Credentials در GoogleAdsConfig تزریق کنید و ذخیره‌سازی کانال را غیرفعال کنید ( UseChannelCache = false ).

اگر ترجیح می‌دهید ایجاد اعتبارنامه را در یک کلاس پیکربندی سفارشی کپسوله‌سازی کنید (یا از نسخه‌های قبلی کتابخانه استفاده می‌کنید)، می‌توانید کلاس GoogleAdsConfig را برای انجام به‌روزرسانی‌های توکن دسترسی خود به شرح زیر گسترش دهید:

// Create your own config class by extending the GoogleAdsConfig class.
class MyGoogleAdsConfig : GoogleAdsConfig
{
    public MyGoogleAdsConfig() : base()
    {
        // Disable the library's built-in channel caching mechanism.
        UseChannelCache = false;
    }

    protected override ICredential CreateCredentials()
    {
        // Create your own ICredential object here. You may refer to the
        // default implementation of GoogleAdsConfig.CreateCredentials
        // for an example.
    }
}

// Use your own config class when initializing the GoogleAdsClient instance.
MyGoogleAdsConfig myConfig = new MyGoogleAdsConfig();
GoogleAdsClient client = new GoogleAdsClient(myConfig);

کامپایل برای ساخت نسخه آزمایشی

هنگام استقرار در سرور، مطمئن شوید که برنامه خود را با استفاده از پیکربندی Release کامپایل می‌کنید. هنگام استفاده از پیکربندی Debug، برنامه شما با اطلاعات کامل اشکال‌زدایی نمادین و بدون بهینه‌سازی‌های کامپایلر کامپایل می‌شود.

برنامه خود را نمایه کنید

برنامه خود را هم از نظر میزان استفاده از CPU و هم از نظر حافظه، پروفایل کنید تا گلوگاه‌های عملکرد را شناسایی کنید. ویژوال استودیو ابزارهای تشخیصی را برای کمک به پروفایل برنامه شما ارائه می‌دهد. همچنین ابزارهای پروفایل تجاری دیگری نیز در دسترس هستند.

استفاده از متدهای ناهمگام (async)

برنامه‌نویسی غیرهمزمان با استفاده از الگوی async-await به جلوگیری از گلوگاه‌های عملکرد کمک می‌کند و پاسخگویی کلی برنامه شما را افزایش می‌دهد. کتابخانه Google Ads.NET متدهای async را برای همه سرویس‌ها و متدهای RPC تولید می‌کند.

لغو متدهای ناهمگام

شما می‌توانید از پارامتر callSettings برای ارسال CancellationToken به متدهای async مانند SearchStreamAsync استفاده کنید:

using CancellationTokenSource cancellationTokenSource =
    new CancellationTokenSource();
cancellationTokenSource.CancelAfter(3000);
CallSettings callSettings =
    CallSettings.FromCancellationToken(cancellationTokenSource.Token);

string query = "SELECT campaign.name FROM campaign";
var request = new SearchGoogleAdsStreamRequest()
{
    CustomerId = customerId.ToString(),
    Query = query,
};

GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V25.GoogleAdsService);

await googleAdsService.SearchStreamAsync(
    request,
    (SearchGoogleAdsStreamResponse resp) =>
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    },
    callSettings);

هر زمان که می‌توانید، ثبت وقایع را غیرفعال کنید

کتابخانه Google Ads .NET به طور پیش‌فرض ثبت وقایع (logging) را غیرفعال می‌کند و از یک رویکرد ثبت وقایع تدریجی (lazy logging) استفاده می‌کند که به برنامه شما عملکرد بهتری می‌دهد. اگر در طول توسعه، ثبت وقایع را فعال می‌کنید، مطمئن شوید که آن را در محیط تولید (production) نیز غیرفعال می‌کنید. اگر نیاز دارید درخواست‌های ناموفق خاصی را در محیط تولید (production) رصد کنید، می‌توانید یک یا چند مورد از مراحل زیر را بدون تأثیر منفی بر عملکرد برنامه خود انجام دهید:

  • فقط خلاصه گزارش‌ها را روشن کنید.
  • گزارش‌های کامل را روی سطح ERROR تنظیم کنید.
  • شناسه درخواست را برای درخواست‌های ناموفق خاص ذخیره کنید تا بتوانید آن را با کانال‌های پشتیبانی به اشتراک بگذارید.

برای کسب اطلاعات بیشتر به راهنمای ثبت نام مراجعه کنید.

از گزینه ReadyToRun استفاده کنید

دات‌نت مدرن از پیش‌کامپایل کردن فایل‌های باینری شما برای یک پلتفرم و معماری خاص با تنظیم PublishReadyToRun روی true و سپس انتشار فایل باینری با مشخص کردن یک RuntimeIdentifier معتبر پشتیبانی می‌کند. برای کسب اطلاعات بیشتر به راهنمای استقرار ReadyToRun مراجعه کنید.

استفاده از کامپایل لایه‌ای

TieredCompilation (که به طور پیش‌فرض در نسخه‌های مدرن .NET مانند .NET 8 فعال است) به .NET اجازه می‌دهد تا نقاط حساس را شناسایی کرده و عملکرد زمان اجرا را بهبود بخشد. کامپایل لایه‌ای با ReadyToRun به خوبی کار می‌کند زیرا می‌تواند از تصویر از پیش تولید شده برای راه‌اندازی سریع استفاده کند و سپس متدهای داغ را با بهینه‌سازی کامل دوباره کامپایل کند. برای کسب اطلاعات بیشتر به راهنمای TieredCompilation مراجعه کنید.

جمع‌آوری زباله (GC) خود را به طور دقیق تنظیم کنید

دات‌نت دو پروفایل کلی برای جمع‌آوری زباله (GC) ارائه می‌دهد: یک پروفایل ایستگاه کاری و یک پروفایل سرور. این دو پروفایل از نظر عملکرد با هم تفاوت دارند. برنامه‌های سرور اختصاصی که از کتابخانه دات‌نت گوگل ادز استفاده می‌کنند، اغلب هنگام اجرا در یک پروفایل سرور، عملکرد بهتری دارند.

شما می‌توانید از تنظیم دقیق تنظیمات GC زیر بهره‌مند شوید:

  • جمع‌آوری زباله سرور: جمع‌آوری زباله سرور به زمان اجرای .NET اجازه می‌دهد تا با کار بر روی چندین heap و thread GC، توان عملیاتی بالاتری را به یک برنامه Google Ads API ارائه دهد. برای جزئیات بیشتر به راهنمای GC سرور مراجعه کنید. می‌توانید با اضافه کردن خطوط زیر به فایل .csproj برنامه خود، جمع‌آوری زباله سرور را فعال کنید:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • جمع‌آوری زباله همزمان: می‌توانید جمع‌آوری زباله همزمان را فعال کنید تا به GC.NET یک نخ اختصاصی برای جمع‌آوری زباله در نسل ۲ بدهید. این تنظیم می‌تواند هنگام پردازش گزارش‌های بزرگ مفید باشد. می‌توانید با اضافه کردن خطوط زیر به فایل .csproj برنامه خود، جمع‌آوری زباله همزمان را فعال کنید:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • حفظ جمع‌آوری زباله ماشین مجازی: تنظیم RetainVMGarbageCollection مشخص می‌کند که آیا بخش‌هایی از حافظه مجازی که باید حذف شوند، برای استفاده‌های بعدی در لیست آماده به کار قرار می‌گیرند یا به سیستم عامل (OS) بازگردانده می‌شوند. می‌توانید با اضافه کردن خطوط زیر به فایل .csproj برنامه خود، حفظ حافظه مجازی را فعال کنید:

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

شما می‌توانید با انتخاب تنظیماتی که رفتار ایستگاه کاری و سرور را متعادل می‌کند، GC خود را به طور دقیق تنظیم کنید. تمام تنظیمات GC مربوطه را می‌توان در فایل runtimeconfig.json برنامه .NET خود، از طریق متغیرهای محیطی یا در App.config خود مشخص کرد.