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