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

ไลบรารีของไคลเอ็นต์ .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 Functions การนำอินสแตนซ์ 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.V21.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

ปิดการบันทึกเมื่อทำได้

ไลบรารี .NET ของ Google Ads จะปิดการบันทึกโดยค่าเริ่มต้นและใช้แนวทางการบันทึกแบบเลซี ซึ่งช่วยให้แอปมีประสิทธิภาพดีขึ้น หากเปิดการบันทึก โปรดตรวจสอบว่าได้ปิดการบันทึกในสภาพแวดล้อมที่ใช้งานจริงแล้ว หากต้องการตรวจสอบคำขอที่ล้มเหลวเฉพาะในเวอร์ชันที่ใช้งานจริง คุณสามารถทำตามขั้นตอนต่อไปนี้อย่างน้อย 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>
    
  • การเก็บขยะพร้อมกัน: คุณสามารถเปิดการเก็บขยะพร้อมกัน เพื่อให้ .NET GC มีเธรดเฉพาะสำหรับการเก็บขยะในรุ่นที่ 2 การตั้งค่านี้อาจมีประโยชน์เมื่อประมวลผลรายงานที่มีขนาดใหญ่ คุณ เปิดการเก็บขยะพร้อมกันได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ .csproj ของแอป

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • เก็บการล้างข้อมูล VM: RetainVMGarbageCollection การตั้งค่า จะกำหนดว่าส่วนของหน่วยความจำเสมือนที่ควรลบจะอยู่ใน รายการสแตนด์บายเพื่อใช้ในอนาคต หรือจะปล่อยกลับไปยังระบบปฏิบัติการ (OS) คุณเปิดการเก็บรักษาหน่วยความจำเสมือนได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในแอป

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

คุณสามารถปรับแต่ง GC ได้โดยเลือกการตั้งค่าที่อยู่ระหว่าง เวิร์กสเตชันกับเซิร์ฟเวอร์ การตั้งค่าที่เกี่ยวข้อง ทั้งหมดระบุไว้ในไฟล์ runtimeconfig.json ของแอป .NET Core, ตัวแปรสภาพแวดล้อม หรือ App.config ของแอป .NET SDK