ไลบรารีของไคลเอ็นต์ .NET ของ Google Ads ช่วยให้การโต้ตอบของแอปกับ Google Ads API ง่ายขึ้น โดยคุณจะต้องกำหนดค่าเพียงเล็กน้อย อย่างไรก็ตาม ประสิทธิภาพโดยรวมจะขึ้นอยู่กับการใช้งานไลบรารีและการผสานรวมกับแอปของคุณเป็นอย่างมาก
คู่มือนี้ครอบคลุมการเพิ่มประสิทธิภาพที่เฉพาะเจาะจงสำหรับแอป .NET และ เสริมแนวทางปฏิบัติแนะนำที่ ใช้ได้กับ Google Ads API โดยทั่วไป
นำ GoogleAdsClient มาใช้ซ้ำทุกครั้งที่ทำได้
GoogleAdsClient แสดงเซสชันของผู้ใช้เมื่อทำการเรียก API โดยจะมีการเพิ่มประสิทธิภาพดังต่อไปนี้
- แคชแชแนล gRPC ที่บริการ API ใช้ ซึ่งจะช่วย ลดเวลาในการตั้งค่าเมื่อทำการเรียก API ครั้งแรก
- ใช้โทเค็นเพื่อการเข้าถึงซ้ำเมื่อเป็นไปได้ ซึ่งจะช่วยลดจำนวนการรับส่ง ที่ไลบรารีของไคลเอ็นต์ .NET ของ Google Ads ต้องดำเนินการเพื่อรีเฟรชโทเค็นเพื่อการเข้าถึง
ใช้โทเค็นเพื่อการเข้าถึงจากบัญชีระดับดูแลจัดการเมื่อเป็นไปได้
หากมีโทเค็นเพื่อการเข้าถึงที่ออกให้ในระดับบัญชีดูแลจัดการ คุณจะใช้โทเค็นดังกล่าวเพื่อ
ทําการเรียก API กับบัญชีลูกค้า Google Ads ทั้งหมดภายใต้ลําดับชั้นของบัญชีนั้นได้
เมื่อใช้ร่วมกับการนำอินสแตนซ์ GoogleAdsClient กลับมาใช้ใหม่ จะช่วยลดจำนวนการรับส่งที่ไลบรารีของไคลเอ็นต์ต้องดำเนินการเพื่อรีเฟรชโทเค็นการเข้าถึงได้อีก
ใช้ SearchStream แทน Search เมื่อเป็นไปได้
Google Ads API มี 2 วิธีหลักในการดึงข้อมูลออบเจ็กต์ ได้แก่
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);
คอมไพล์สำหรับบิลด์ที่เผยแพร่
ตรวจสอบว่าคุณคอมไพล์แอปโดยใช้การกำหนดค่ารุ่น เมื่อติดตั้งใช้งานในเซิร์ฟเวอร์ เมื่อใช้การกำหนดค่าการแก้ไขข้อบกพร่อง แอปจะ คอมไพล์พร้อมข้อมูลการแก้ไขข้อบกพร่องแบบสัญลักษณ์ทั้งหมดและไม่มีการเพิ่มประสิทธิภาพของคอมไพเลอร์
ทำโปรไฟล์แอป
สร้างโปรไฟล์แอปทั้งสำหรับการใช้งาน 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.V25.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
},
callSettings);
ปิดการบันทึกเมื่อทำได้
ไลบรารี .NET ของ Google Ads จะปิดการบันทึกโดยค่าเริ่มต้น และใช้แนวทางการบันทึกแบบเลซี ซึ่งช่วยให้แอปมีประสิทธิภาพดียิ่งขึ้น หากเปิดการบันทึกระหว่าง การพัฒนา ให้ตรวจสอบว่าได้ปิดการบันทึกในสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์แล้ว หากคุณต้องการตรวจสอบคำขอที่ล้มเหลวเฉพาะในเวอร์ชันที่ใช้งานจริง ให้ทำตามขั้นตอนต่อไปนี้อย่างน้อย 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