ประสิทธิภาพของแอปพลิเคชัน

ไลบรารีของไคลเอ็นต์ .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