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

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