ספריית הלקוח של Google Ads ל- .NET מפשטת את האינטראקציות של האפליקציה עם Google Ads API, עם הגדרה מינימלית מצידכם. עם זאת, הביצועים הכוללים תלויים במידה רבה באופן שבו משתמשים בספרייה ומשלבים אותה באפליקציה.
במדריך הזה מוסבר על אופטימיזציות של ביצועים שספציפיות לאפליקציות .NET, והוא משלים את השיטות המומלצות שחלות באופן כללי על Google Ads API.
שימוש חוזר ב-GoogleAdsClient כשהדבר אפשרי
GoogleAdsClient
מייצג סשן של משתמש בזמן ביצוע קריאות ל-API. הוא מספק אופטימיזציות כמו:
- שמירת ערוצי gRPC במטמון, שבהם משתמשים שירותי ה-API. כך אפשר לקצר את זמן ההגדרה בזמן ביצוע הקריאות הראשוניות ל-API.
- שימוש חוזר באסימוני גישה כשהדבר אפשרי. כך מופחת מספר הנסיעות הלוך ושוב שספריית הלקוח של Google Ads ב- .NET צריכה לבצע כדי לרענן את אסימוני הגישה.
כשהדבר אפשרי, כדאי להשתמש באסימוני גישה מחשבון ברמת ניהול
- אם יש לכם אסימון גישה שהונפק ברמת חשבון הניהול, תוכלו להשתמש בו כדי לבצע קריאות API לכל חשבונות הלקוח ב-Google Ads שנמצאים בהיררכיית החשבון הזו. בשילוב עם שימוש חוזר במכונות
GoogleAdsClient
, אפשר לצמצם עוד יותר את מספר הנסיעות הלוך ושוב שספריית הלקוח צריכה לבצע כדי לרענן את אסימוני הגישה.
כשהדבר אפשרי, השתמשו ב-SearchStream במקום בחיפוש
בעוד ש-GoogleAdsService.Search
יכול לשלוח כמה בקשות עם דפים כדי להוריד את הדוח כולו, GoogleAdsService.SearchStream
שולח בקשה אחת ומתחיל חיבור מתמיד ל-Google Ads API, ללא קשר לגודל הדוח. SearchStream
יכול לשפר את הביצועים בהשוואה לגלילה, כי הוא מבטל את זמן הנסיעה הלוך ושוב ברשת שנדרש כדי לבקש כל דף בנפרד בתגובה Search
, בהתאם לאפליקציה. למידע נוסף על האופטימיזציה הזו, אפשר לעיין במאמר חיפוש לעומת SearchStream.
ניהול ידני של הרענון של אסימוני הגישה
בסביבות מסוימות, כמו Google Cloud Functions, יכול להיות שלא יהיה אפשר לעשות שימוש חוזר במכונות 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);
הידור לגרסת build להפצה
חשוב להקפיד לקמפל את האפליקציה באמצעות הגדרת הגרסה בזמן הפריסה בשרת. כשמשתמשים בהגדרת ניפוי הבאגים, האפליקציה עוברת הידור עם פרטי ניפוי באגים סמלי מלאים ללא אופטימיזציה.
יצירת פרופיל לאפליקציה
יצירת פרופיל של האפליקציה גם לשימוש במעבד (CPU) וגם לשימוש בזיכרון, כדי לזהות צווארי בקבוק בביצועים. ב-Visual Studio יש כלים לצורך אבחון שיעזרו לכם ליצור פרופיל של האפליקציה. יש גם כלים מסחריים אחרים ליצירת פרופיל.
שימוש בשיטות אסינכרוניות
תכנות אסינכרונית באמצעות הפרדיגמה async-await עוזרת למנוע צווארי בקבוק בביצועים ולשפר את היכולת של האפליקציה להגיב. הספרייה של Google Ads ל-.NET יוצרת שיטות אסינכרוניות לכל השירותים ושיטות ה-RPC.
ביטול שיטות אסינכרוניות
אפשר להשתמש בפרמטר callSettings
כדי להעביר CancellationToken
לשיטות אסינכררוניות:
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.V19.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
השבתת הרישום ביומן כשהדבר אפשרי
בספריית Google Ads ל- .NET, רישום ביומן מושבת כברירת מחדל, והיא משתמשת בגישה של רישום ביומן מושהה, שמאפשרת לשפר את הביצועים של האפליקציה. אם מפעילים את הרישום ביומן, חשוב להשבית אותו בסביבת הייצור. אם אתם צריכים לעקוב אחרי בקשות ספציפיות שנכשלו בסביבת הייצור, תוכלו לבצע אחת או יותר מהפעולות הבאות בלי להשפיע לרעה על הביצועים של האפליקציה:
- מפעילים רק את יומני הסיכום.
- מגדירים את היומנים המלאים לרמה
ERROR
. - כדאי לשמור את מספר הבקשה של בקשות ספציפיות שחשובות לכם, כדי שתוכלו לשתף אותן עם ערוצי התמיכה.
מידע נוסף זמין במדריך בנושא רישום ביומן.
מחליטים אם להשתמש בשיטה SearchStream או בשיטה Search
ב-Google Ads API יש שתי דרכים עיקריות לאחזור אובייקטים: השיטה Search
(שמשתמשת בחלוקה לדפים) והשיטה SearchStream
(שמשתמשת בסטרימינג).
SearchStream
מספק ביצועים טובים יותר מ-Search
, אבל יש תרחישים שבהם עדיף להשתמש ב-Search
.
מידע נוסף על שתי השיטות זמין במדריך הדוחות של סטרימינג.
שימוש באפשרות ReadyToRun
ב-NET Core 3.1 נוספה תמיכה בתכנות מראש של קבצים בינאריים לפלטפורמה ולארכיטקטורה ספציפיות.לשם כך, צריך לציין את ההגדרה PublishReadyToRun
כ-true
, ואז לפרסם את הקובץ הבינארי על ידי ציון RuntimeIdentifier
תקין בזמן הפרסום. מידע נוסף זמין במדריך על התכונה ReadyToRun
.
שימוש ב-TieredCompilation
TieredCompilation
מאפשר ל-NET לזהות נקודות חמות ולשפר את הביצועים. הידור מדורג פועל טוב יותר עם האפשרות ReadyToRun
, כי הוא יכול להשתמש בתמונה שנוצרה מראש כשהיא זמינה. מידע נוסף זמין במדריך בנושא TieredCompilation
.
כוונון של האיסוף האוטומטי של אשפה (GC)
ב-.NET יש שני פרופילים כלליים לאיסוף אשפה (GC): פרופיל של תחנת עבודה ופרופיל של שרת. לשני הפרופילים האלה יש פשרות שונות לגבי הביצועים. בדרך כלל, הביצועים של אפליקציות שמשתמשות בספריית Google Ads ל-NET טובים יותר כשהן פועלות בפרופיל שרת. כדאי לשפר את ההגדרות הבאות של GC.
איסוף אשפה בשרת: איסוף אשפה בשרת מאפשר לסביבת זמן הריצה של .NET לספק ביצועים טובים יותר לאפליקציה של Google Ads API על ידי הפעלה בכמה שרשורים. פרטים נוספים זמינים במדריך הזה. אתה יכול להפעיל את איסוף האשפה של השרת על ידי הוספת ה השורות הבאות לקובץ
.csproj
של האפליקציה שלך.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
איסוף אשפה בו-זמנית: אפשר להפעיל איסוף אשפה בו-זמנית כדי לתת ל-GC של .NET שרשור ייעודי לאיסוף אשפה בדור 2. ההגדרה הזו יכולה להיות שימושית כשמעובדים דוחות גדולים. כדי להפעיל איסוף אשפה בו-זמנית, מוסיפים את השורות הבאות לקובץ
.csproj
של האפליקציה.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Retain VM garbage collection: הגדרת
RetainVMGarbageCollection
קובעת אם קטעי זיכרון וירטואלי שצריך למחוק יועברו לרשימה של זיכרון שממתין לשימוש עתידי, או ישוחררו בחזרה למערכת ההפעלה (OS). כדי להפעיל את שמירת הזיכרון הווירטואלי, צריך להוסיף את השורות הבאות לאפליקציה.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
כדי לשפר את GC, אפשר להשתמש בהגדרה שבין תחנת עבודה לשרת. כל ההגדרות הרלוונטיות מפורטות בקובץ runtimeconfig.json
של אפליקציית .NET Core, במשתנה סביבה או בקובץ App.config
של אפליקציית .NET SDK.