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

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

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

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

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

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

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

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

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

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

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

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

// Create your own config class by extending the GoogleAdsConfig class.

class MyGoogleAdsConfig : GoogleAdsConfig
{
    public MyGoogleAdsConfig() : base()
    {
        // Disable the library's in-built channel caching mechanism.
        this.UseChannelCache = false;
    }
    protected override ICredential CreateCredentials()
    {
        // TODO: Create your own ICredentials object here. You may refer to the
        // default implementation of GoogleAdsConfig::CreateCreateCredentials
        // 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 استفاده کنید:

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.V22.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

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

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

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

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

تصمیم بگیرید که از متد SearchStream یا Search استفاده کنید.

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

SearchStream عملکرد بهتری نسبت به Search ارائه می‌دهد، اما سناریوهایی وجود دارد که Search ترجیح داده می‌شود.

برای کسب اطلاعات بیشتر در مورد این دو روش، به راهنمای گزارش‌های پخش زنده مراجعه کنید.

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

.NET Core 3.1 با مشخص کردن تنظیم PublishReadyToRun روی true و سپس انتشار فایل باینری با مشخص کردن یک RuntimeIdentifier معتبر هنگام انتشار، پشتیبانی از پیش‌کامپایل کردن فایل‌های باینری شما برای یک پلتفرم و معماری خاص را اضافه می‌کند. برای کسب اطلاعات بیشتر به راهنمای ویژگی ReadyToRun مراجعه کنید.

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

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

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

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

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

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

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

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

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