ספריית הלקוח של Google Ads .NET מפשטת את האינטראקציות של האפליקציה עם Google Ads API, עם מינימום הגדרות מצדכם. עם זאת, הביצועים הכוללים תלויים מאוד באופן השימוש בספרייה ובאופן השילוב שלה באפליקציה.
במדריך הזה מוסבר איך לבצע אופטימיזציה של הביצועים באפליקציות .NET, והוא משלים את השיטות המומלצות שרלוונטיות באופן כללי ל-Google Ads API.
שימוש חוזר ב-GoogleAdsClient בכל הזדמנות
GoogleAdsClient
מייצג את הסשן של המשתמש כשמתבצעות קריאות ל-API. הוא מספק אופטימיזציות כמו:
- שמירת ערוצי gRPC במטמון שמשמשים שירותי API. הפעולה הזו מקצרת את זמן ההגדרה כשמבצעים קריאות ראשוניות ל-API.
- שימוש חוזר בטוקנים של גישה כשזה אפשרי. כך מצטמצם מספר ה-round trips שספריית הלקוח של Google Ads .NET צריכה לבצע כדי לרענן את אסימוני הגישה.
כדאי להשתמש באסימוני גישה מחשבון ברמת ניהול כשזה אפשרי
- אם יש לכם טוקן גישה שהונפק ברמת חשבון ניהול, אתם יכולים להשתמש בו כדי לבצע קריאות ל-API בכל חשבונות הלקוח ב-Google Ads שמשויכים להיררכיה של אותו חשבון. כשמשלבים את זה עם שימוש חוזר במופעי
GoogleAdsClient
, אפשר לצמצם עוד יותר את מספר ההעברות הלוך ושוב שספריית הלקוח צריכה לבצע כדי לרענן את אסימוני הגישה.
אם אפשר, כדאי להשתמש ב-SearchStream במקום ב-Search
GoogleAdsService.Search
יכול לשלוח כמה בקשות עם מספור עמודים כדי להוריד את הדוח כולו, אבל GoogleAdsService.SearchStream
שולח בקשה אחת ויוצר חיבור קבוע ל-Google Ads API, בלי קשר לגודל הדוח. השימוש ב-SearchStream
עשוי לשפר את הביצועים בהשוואה להחלפת דפים, כי הוא מבטל את זמן האחזור הנדרש ברשת כדי לבקש כל דף בנפרד בתגובה של Search
, בהתאם לאפליקציה שלכם. במאמר השוואה בין 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.V21.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
השבתת הרישום ביומן כשניתן
ספריית Google Ads .NET משביתה את הרישום ביומן כברירת מחדל ומשתמשת בגישה של רישום ביומן עצלן, שמשפרת את הביצועים של האפליקציה. אם מפעילים את הרישום ביומן, חשוב להשבית אותו בסביבת הייצור. אם אתם צריכים לעקוב אחרי בקשות ספציפיות שנכשלו בסביבת הייצור, אתם יכולים לבצע אחת או יותר מהפעולות הבאות בלי להשפיע לרעה על הביצועים של האפליקציה:
- מפעילים רק את יומני הסיכום.
- מגדירים את היומנים המלאים לרמה
ERROR
. - שומרים את מזהה הבקשה לבקשות ספציפיות שמעניינות אתכם, כדי שתוכלו לשתף אותו עם ערוצי התמיכה.
מידע נוסף זמין במדריך הרישום ביומן.
החלטה אם להשתמש ב-SearchStream או בשיטת החיפוש
יש שתי דרכים עיקריות לאחזור אובייקטים באמצעות 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 נוטות להניב ביצועים טובים יותר כשהן פועלות בפרופיל שרת. כדאי לכוונן את ההגדרות הבאות של איסוף האשפה.
איסוף אשפה בשרת: איסוף אשפה בשרת מאפשר לזמן הריצה של .NET לשפר את הביצועים של אפליקציית Google Ads API על ידי פעולה במספר שרשורים. פרטים נוספים זמינים במדריך הזה. כדי להפעיל את איסוף הגרוטאות בשרת, מוסיפים את השורות הבאות לקובץ
.csproj
של האפליקציה.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
איסוף אשפה בו-זמני: אפשר להפעיל איסוף אשפה בו-זמני כדי להקצות ל-GC של .NET שרשור ייעודי לאיסוף אשפה בדור 2. ההגדרה הזו יכולה להיות שימושית כשמעבדים דוחות גדולים. כדי להפעיל איסוף אשפה מקביל, מוסיפים את השורות הבאות לקובץ
.csproj
של האפליקציה.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
שמירת איסוף האשפה של מכונת ה-VM: ההגדרה
RetainVMGarbageCollection
קובעת אם פלחים של זיכרון וירטואלי שצריך למחוק יועברו לרשימת המתנה לשימוש עתידי, או יוחזרו למערכת ההפעלה (OS). כדי להפעיל שמירה של זיכרון וירטואלי, מוסיפים את השורות הבאות לאפליקציה.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
אתם יכולים לכוונן את ה-GC על ידי הגדרת מערכת שנמצאת בין תחנת עבודה לבין שרת. כל ההגדרות הרלוונטיות מצוינות בקובץ runtimeconfig.json
של אפליקציית .NET Core, במשתנה סביבתי או בקובץ App.config
של אפליקציית .NET SDK.