ไลบรารีของไคลเอ็นต์ .NET ของ Google Ads ช่วยลดความซับซ้อนในการโต้ตอบของแอปกับ Google Ads API โดยมีการกำหนดค่าเพียงเล็กน้อยในส่วนของคุณ อย่างไรก็ตาม ประสิทธิภาพโดยรวมจะขึ้นอยู่กับวิธีใช้ไลบรารีและการผสานรวมกับแอปของคุณเป็นอย่างมาก
คู่มือนี้ครอบคลุมการเพิ่มประสิทธิภาพที่เจาะจงสำหรับแอป .NET และเสริมแนวทางปฏิบัติแนะนำที่ใช้ได้กับ Google Ads API โดยทั่วไป
ใช้ GoogleAdsClient ซ้ำทุกครั้งที่ทำได้
GoogleAdsClient แสดงถึงเซสชันของผู้ใช้เมื่อทำการเรียก API โดยจะให้การเพิ่มประสิทธิภาพต่างๆ เช่น
- การแคชแชแนล gRPC ที่บริการ API ใช้ ซึ่งจะช่วยลดเวลาในการตั้งค่าเมื่อทำการเรียก API ครั้งแรก
- ใช้โทเค็นเพื่อการเข้าถึงซ้ำเมื่อเป็นไปได้ ซึ่งจะช่วยลดจำนวนรอบที่ไลบรารีของไคลเอ็นต์ Google Ads .NET ต้องดำเนินการเพื่อรีเฟรชโทเค็นเพื่อการเข้าถึง
ใช้โทเค็นเพื่อการเข้าถึงจากบัญชีระดับผู้จัดการเมื่อเป็นไปได้
หากมีโทเค็นเพื่อการเข้าถึงที่ออกในระดับบัญชีดูแลจัดการ คุณจะใช้โทเค็นดังกล่าวเพื่อเรียก API กับบัญชีลูกค้า Google Ads ทั้งหมดภายใต้ลำดับชั้นของบัญชีนั้นได้
เมื่อรวมกับการนำอินสแตนซ์ GoogleAdsClient มาใช้ซ้ำ วิธีนี้จะช่วยลดจำนวนรอบการไป-กลับที่ไลบรารีของไคลเอ็นต์ต้องดำเนินการเพื่อรีเฟรชโทเค็นเพื่อการเข้าถึงได้อีก
ใช้ SearchStream แทน Search หากเป็นไปได้
Google Ads API มีวิธีหลัก 2 วิธีในการดึงข้อมูลออบเจ็กต์ ได้แก่ GoogleAdsService.Search (ซึ่งใช้การแบ่งหน้า) และ GoogleAdsService.SearchStream (ซึ่งใช้สตรีมมิง)
แม้ว่า Search จะส่งคำขอที่มีการแบ่งหน้าหลายรายการเพื่อดาวน์โหลดรายงานทั้งหมด แต่ SearchStream จะส่งคำขอเดียวและเริ่มการเชื่อมต่อแบบถาวรกับ Google Ads API ไม่ว่ารายงานจะมีขนาดเท่าใดก็ตาม โดยทั่วไปแล้ว SearchStream จะมีประสิทธิภาพดีกว่าการแบ่งหน้า เนื่องจากช่วยลดเวลาในการส่งข้อมูลไปกลับในเครือข่ายที่จำเป็นสำหรับการขอหน้าเว็บแต่ละหน้าของการตอบกลับ Search ดูคู่มือการสตรีมรายงานเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับกรณีที่ควรเลือกแต่ละวิธี
จัดการการรีเฟรชโทเค็นเพื่อการเข้าถึงด้วยตนเอง
ในสภาพแวดล้อมแบบไม่เก็บสถานะบางอย่าง เช่น 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);
คอมไพล์สำหรับบิลด์ที่เผยแพร่
ตรวจสอบว่าคุณคอมไพล์แอปโดยใช้การกำหนดค่ารุ่นเมื่อติดตั้งใช้งานในเซิร์ฟเวอร์ เมื่อใช้การกำหนดค่าการแก้ไขข้อบกพร่อง แอปจะคอมไพล์ด้วยข้อมูลการแก้ไขข้อบกพร่องเชิงสัญลักษณ์แบบเต็มและไม่มีการเพิ่มประสิทธิภาพคอมไพเลอร์
ทำโปรไฟล์แอป
สร้างโปรไฟล์แอปทั้งสำหรับการใช้งาน CPU และหน่วยความจำเพื่อระบุคอขวดด้านประสิทธิภาพ Visual Studio มีเครื่องมือวินิจฉัยเพื่อช่วยสร้างโปรไฟล์แอป นอกจากนี้ยังมีเครื่องมือสร้างโปรไฟล์เชิงพาณิชย์อื่นๆ ที่พร้อมใช้งานด้วย
ใช้เมธอดแบบไม่พร้อมกัน
การเขียนโปรแกรมแบบอะซิงโครนัสโดยใช้กระบวนทัศน์ async-await ช่วยหลีกเลี่ยงปัญหาคอขวดด้านประสิทธิภาพและเพิ่มการตอบสนองโดยรวมของแอป ไลบรารี .NET ของ Google Ads จะสร้างเมธอดแบบอะซิงโครนัสสําหรับบริการและเมธอด 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 Ads จะปิดการบันทึกโดยค่าเริ่มต้นและใช้แนวทางการบันทึกแบบ Lazy ซึ่งช่วยให้แอปมีประสิทธิภาพดีขึ้น หากเปิดการบันทึกระหว่างการพัฒนาซอฟต์แวร์ โปรดปิดการบันทึกในสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ หากต้องการตรวจสอบคำขอที่ล้มเหลวโดยเฉพาะในเวอร์ชันที่ใช้งานจริง คุณสามารถทำตามขั้นตอนต่อไปนี้อย่างน้อย 1 ขั้นตอนโดยไม่ส่งผลเสียต่อประสิทธิภาพของแอป
- เปิดเฉพาะบันทึกสรุป
- ตั้งค่าบันทึกแบบเต็มเป็นระดับ
ERROR - บันทึกรหัสคำขอสำหรับคำขอที่ล้มเหลวโดยเฉพาะ เพื่อให้คุณแชร์กับช่องทางการสนับสนุนได้
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการบันทึก
ใช้ตัวเลือก ReadyToRun
.NET สมัยใหม่รองรับการคอมไพล์ไบนารีล่วงหน้าไปยังแพลตฟอร์มและสถาปัตยกรรมที่เฉพาะเจาะจงโดยการตั้งค่า PublishReadyToRun เป็น true จากนั้นเผยแพร่ไบนารีโดยระบุ RuntimeIdentifier ที่ถูกต้อง ดูข้อมูลเพิ่มเติมได้ที่คู่มือการติดตั้งใช้งาน ReadyToRun
ใช้ TieredCompilation
TieredCompilation (เปิดใช้โดยค่าเริ่มต้นในเวอร์ชัน .NET สมัยใหม่ เช่น .NET 8) ช่วยให้ .NET ระบุฮอตสปอตและปรับปรุงประสิทธิภาพรันไทม์ได้ การคอมไพล์แบบแบ่งระดับทำงานได้ดีกับ ReadyToRun เนื่องจากสามารถใช้รูปภาพที่สร้างไว้ล่วงหน้าเพื่อการเริ่มต้นอย่างรวดเร็ว แล้วจึงคอมไพล์เมธอดที่ใช้บ่อยใหม่ด้วยการเพิ่มประสิทธิภาพอย่างเต็มรูปแบบ
ดูข้อมูลเพิ่มเติมได้ที่คู่มือ TieredCompilation
ปรับแต่งการจัดการหน่วยความจำที่ไม่ใช้แล้ว (GC)
.NET มีโปรไฟล์ทั่วไป 2 โปรไฟล์สำหรับการเก็บขยะ (GC) ได้แก่ โปรไฟล์เวิร์กสเตชันและโปรไฟล์เซิร์ฟเวอร์ โปรไฟล์ทั้ง 2 แบบนี้มีข้อดีข้อเสียด้านประสิทธิภาพที่แตกต่างกัน แอปเซิร์ฟเวอร์เฉพาะที่ใช้ไลบรารี .NET ของ Google Ads มักจะมีประสิทธิภาพดีกว่าเมื่อทำงานในโปรไฟล์เซิร์ฟเวอร์
คุณจะได้รับประโยชน์จากการปรับแต่งการตั้งค่า GC ต่อไปนี้
การเก็บขยะของเซิร์ฟเวอร์: การเก็บขยะของเซิร์ฟเวอร์ช่วยให้รันไทม์ .NET มีอัตราการส่งข้อมูลที่สูงขึ้นไปยังแอป Google Ads API โดยทำงานบนฮีปและเธรด GC หลายรายการ ดูรายละเอียดเพิ่มเติมได้ที่คู่มือ GC ของเซิร์ฟเวอร์ คุณเปิดการเก็บขยะของเซิร์ฟเวอร์ได้โดยเพิ่มบรรทัดต่อไปนี้ลงในไฟล์
.csprojของแอป<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>การจัดการหน่วยความจำที่ไม่ใช้แล้วพร้อมกัน: คุณสามารถเปิดการจัดการหน่วยความจำที่ไม่ใช้แล้วพร้อมกันเพื่อให้ .NET GC มีเทรดเฉพาะสำหรับการจัดการหน่วยความจำที่ไม่ใช้แล้วในรุ่นที่ 2 การตั้งค่านี้จะมีประโยชน์เมื่อประมวลผลรายงานขนาดใหญ่ คุณเปิดการเก็บขยะพร้อมกันได้โดยเพิ่มบรรทัดต่อไปนี้ลงในไฟล์
.csprojของแอป<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>คงการเก็บขยะ VM: การตั้งค่า
RetainVMGarbageCollectionจะกำหนดค่าว่าจะนำส่วนของหน่วยความจำเสมือนที่ควรลบไปไว้ในรายการสแตนด์บายเพื่อใช้ในอนาคต หรือจะปล่อยกลับไปยังระบบปฏิบัติการ (OS) คุณสามารถเปิดการเก็บรักษาหน่วยความจำเสมือนได้โดยเพิ่มบรรทัดต่อไปนี้ลงในไฟล์.csprojของแอป<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
คุณสามารถปรับแต่ง GC ได้โดยเลือกการตั้งค่าที่สร้างสมดุลระหว่างลักษณะการทำงานของเวิร์กสเตชันและเซิร์ฟเวอร์ คุณสามารถระบุการตั้งค่า GC ที่เกี่ยวข้องทั้งหมดได้ในไฟล์ runtimeconfig.json ของแอป .NET ผ่านตัวแปรสภาพแวดล้อม หรือใน App.config