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

تسهّل مكتبة عميل ‎ .NET في "إعلانات Google" تفاعلات تطبيقك مع 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 في تجنُّب المشاكل التي تؤدي إلى بطء الأداء وتعزيز الاستجابة العامة لتطبيقك. تنشئ مكتبة Google Ads .NET طرقًا غير متزامنة لجميع الخدمات وطرق 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.V25.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.

Use TieredCompilation

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

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

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

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

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

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

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

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

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