أداء التطبيقات

تسهّل مكتبة عملاء Google Ads .NET تفاعلات تطبيقك مع Google Ads API، مع الحدّ الأدنى من الإعدادات من جانبك. ومع ذلك، يعتمد الأداء العام بشكل كبير على كيفية استخدام المكتبة ودمجها مع تطبيقك.

يتناول هذا الدليل تحسينات الأداء الخاصة بتطبيقات ‎ .NET، ويكمّل أفضل الممارسات التي تنطبق بشكل عام على Google Ads API.

إعادة استخدام GoogleAdsClient كلما أمكن ذلك

يمثّل GoogleAdsClient جلسة المستخدم عند إجراء طلبات بيانات من واجهة برمجة التطبيقات. وتوفّر تحسينات مثل:

  • تخزين قنوات gRPC التي تستخدمها خدمات واجهة برمجة التطبيقات مؤقتًا يؤدي ذلك إلى تقليل وقت الإعداد عند إجراء طلبات بيانات من واجهة برمجة التطبيقات الأولية.
  • إعادة استخدام رموز الدخول عندما يكون ذلك ممكنًا يؤدي ذلك إلى تقليل عدد عمليات الذهاب والعودة التي يجب أن تنفّذها مكتبة عملاء ‎ .NET في "إعلانات Google" لإعادة تحميل رموز الدخول.

استخدام رموز الدخول من حساب على مستوى المدير إن أمكن

إذا كان لديك رمز مميّز للوصول تم إصداره على مستوى حساب إداري، يمكنك استخدامه لإجراء طلبات بيانات من واجهة برمجة التطبيقات لجميع حسابات عملاء "إعلانات Google" ضمن التسلسل الهرمي لهذا الحساب. عند دمج هذه الطريقة مع إعادة استخدام مثيلات GoogleAdsClient، يمكن أن يؤدي ذلك إلى تقليل عدد الرحلات ذهابًا وإيابًا التي يجب أن تنفّذها مكتبة البرامج لإعادة تحميل رموز الدخول.

استخدام SearchStream بدلاً من Search كلما أمكن ذلك

توفّر Google Ads API طريقتَين رئيسيتَين لاسترداد العناصر: GoogleAdsService.Search (التي تستخدم تقسيم النتائج إلى صفحات) و GoogleAdsService.SearchStream (التي تستخدم البث).

في حين أنّ Search يرسل طلبات متعددة مقسّمة على صفحات لتنزيل تقرير كامل، يرسل SearchStream طلبًا واحدًا ويبدأ اتصالاً مستمرًا مع Google Ads API بغض النظر عن حجم التقرير. من خلال إلغاء وقت الشبكة اللازم لطلب كل صفحة فردية من استجابة Search، يقدّم SearchStream بشكل عام أداءً أفضل من التنقّل بين الصفحات. يمكنك الاطّلاع على دليل تقارير البث لمعرفة المزيد عن الحالات التي يجب فيها اختيار كل طريقة.

إدارة عمليات إعادة تحميل رموز الدخول يدويًا

في بعض البيئات عديمة الحالة، مثل Google Cloud Functions، قد لا يكون من الممكن إعادة استخدام مثيلات GoogleAdsClient في جميع عمليات الاستدعاء. وتتّبع هذه البيئات أفضل الممارسات الخاصة بها للاحتفاظ بالبيانات وإعادة استخدامها.

في الإصدار Google.Ads.GoogleAds v27.0.0 والإصدارات الأحدث، يمكنك إدخال مثيل ICredential الذي تم إعداده مسبقًا مباشرةً على GoogleAdsConfig باستخدام السمة Credentials وإيقاف التخزين المؤقت للقناة (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);

التجميع لبنية الإصدار

تأكَّد من تجميع تطبيقك باستخدام إعدادات الإصدار عند نشره على الخادم. عند استخدام إعدادات "تصحيح الأخطاء"، يتم تجميع تطبيقك باستخدام معلومات تصحيح الأخطاء الرمزية الكاملة وبدون تحسينات برنامج التجميع.

تحليل أداء تطبيقك

يمكنك تحليل تطبيقك من حيث استخدام وحدة المعالجة المركزية والذاكرة لتحديد المؤثّرات السلبية في الأداء. يوفّر Visual Studio أدوات تشخيص للمساعدة في إنشاء ملف تعريف لتطبيقك. وهناك أيضًا أدوات تجارية أخرى لإنشاء ملفات التعريف متاحة.

استخدام الطرق غير المتزامنة

تساعد البرمجة غير المتزامنة باستخدام نموذج async-await في تجنُّب معوقات الأداء وتحسين الاستجابة العامة لتطبيقك. تنشئ مكتبة ‎ .NET في "إعلانات Google" طرقًا غير متزامنة لجميع الخدمات وطرق RPC.

إلغاء الطرق غير المتزامنة

يمكنك استخدام المَعلمة callSettings لتمرير CancellationToken إلى الطرق غير المتزامنة، مثل 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.V26.GoogleAdsService);

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

إيقاف التسجيل متى أمكن

توقِف مكتبة ‎ .NET في "إعلانات Google" التسجيل تلقائيًا وتستخدِم نهج التسجيل الكسول الذي يمنح تطبيقك أداءً أفضل. في حال تفعيل التسجيل أثناء التطوير، تأكَّد من إيقافه في بيئة التشغيل الفعلي. إذا كنت بحاجة إلى مراقبة طلبات فاشلة معيّنة في مرحلة الإنتاج، يمكنك تنفيذ خطوة واحدة أو أكثر من الخطوات التالية بدون التأثير سلبًا في أداء تطبيقك:

  • فعِّل سجلّات الملخّصات فقط.
  • اضبط السجلّات الكاملة على مستوى ERROR.
  • احفظ معرّف الطلب لطلبات معيّنة يتعذّر إكمالها لتتمكّن من مشاركته مع قنوات الدعم.

لمزيد من المعلومات، يُرجى الاطّلاع على دليل التسجيل.

استخدام خيار ReadyToRun

يتيح الإصدار الحديث من ‎ .NET تجميع الملفات الثنائية مسبقًا لمنصة وبنية محدّدة من خلال ضبط PublishReadyToRun على true، ثم نشر الملف الثنائي من خلال تحديد RuntimeIdentifier صالح. يمكنك الاطّلاع على دليل نشر ReadyToRun لمزيد من المعلومات.

استخدام TieredCompilation

TieredCompilation (يتم تفعيله تلقائيًا في إصدارات ‎ .NET الحديثة، مثل ‎ .NET 8) يسمح لـ ‎ .NET بتحديد النقاط الفعّالة وتحسين أداء وقت التشغيل. تعمل ميزة "التجميع المتعدّد المستويات" بشكل جيد مع ReadyToRun لأنّها تستطيع استخدام الصورة التي تم إنشاؤها مسبقًا لبدء التشغيل السريع ثم إعادة تجميع الطرق الأكثر استخدامًا مع إجراء تحسينات كاملة. لمزيد من المعلومات، يمكنك الاطّلاع على دليل TieredCompilation.

تحسين عملية جمع البيانات المُهمَلة (GC)

يوفّر ‎.NET ملفَّين شخصيَّين عامَّين لجمع المهملات (GC): ملف شخصي لمحطة العمل وملف شخصي للخادم. يحتوي هذان الملفان الشخصيان على مفاضلات أداء مختلفة. غالبًا ما تحقّق تطبيقات الخوادم المخصّصة التي تستخدم مكتبة ‎ .NET في "إعلانات Google" أداءً أفضل عند تشغيلها في ملف شخصي للخادم.

يمكنك الاستفادة من ضبط إعدادات GC التالية:

  • تجميع الموارد غير الصالحة من الخادم: يسمح تجميع الموارد غير الصالحة من الخادم لوقت تشغيل ‎ .NET بمنح معدل نقل بيانات أعلى لتطبيق Google Ads API من خلال العمل على عدة أكوام ومؤشرات ترابط لتجميع الموارد غير الصالحة. يُرجى الاطّلاع على دليل GC للخادم لمزيد من التفاصيل. يمكنك تفعيل ميزة "تجميع الموارد غير الصالحة" في الخادم من خلال إضافة الأسطر التالية إلى ملف .csproj في تطبيقك:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • جمع البيانات المهملة المتزامن: يمكنك تفعيل جمع البيانات المهملة المتزامن لمنح .NET GC سلسلة محادثات مخصّصة لجمع البيانات المهملة في الجيل الثاني. يمكن أن يكون هذا الإعداد مفيدًا عند معالجة التقارير الكبيرة. يمكنك تفعيل ميزة "جمع المهملات المتزامن" من خلال إضافة الأسطر التالية إلى ملف .csproj في تطبيقك:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • الاحتفاظ ببيانات المهملات في الجهاز الافتراضي: يتيح الإعداد RetainVMGarbageCollection ضبط ما إذا كان سيتم وضع أجزاء الذاكرة الافتراضية التي يجب حذفها في قائمة الاستعداد لاستخدامها في المستقبل، أو سيتم إعادتها إلى نظام التشغيل. يمكنك تفعيل ميزة الاحتفاظ بالذاكرة الافتراضية من خلال إضافة الأسطر التالية إلى ملف .csproj في تطبيقك:

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

يمكنك ضبط GC بدقة عن طريق اختيار إعداد يوازن بين سلوك محطة العمل والخادم. يمكن تحديد جميع إعدادات GC ذات الصلة في ملف runtimeconfig.json الخاص بتطبيق ‎ .NET، من خلال متغيّرات البيئة أو في App.config.