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

ไลบรารีของไคลเอ็นต์ Google Ads .NET ช่วยลดความซับซ้อนในการโต้ตอบของแอปกับ Google Ads API โดยคุณไม่ต้องกำหนดค่ามากนัก อย่างไรก็ตาม ประสิทธิภาพโดยรวมจะขึ้นอยู่กับวิธีใช้และผสานรวมไลบรารีกับแอป

คู่มือนี้ครอบคลุมการเพิ่มประสิทธิภาพที่เฉพาะเจาะจงกับแอป .NET และ เสริมแนวทางปฏิบัติ แนะนำที่ใช้ได้กับ Google Ads API โดยทั่วไป

ใช้ `GoogleAdsClient` ซ้ำทุกครั้งที่ทำได้

GoogleAdsClient แสดงถึงเซสชันของผู้ใช้เมื่อทำการเรียก API โดยจะมีการเพิ่มประสิทธิภาพ เช่น

  • แคชช่อง gRPC ที่บริการ API ใช้ ซึ่งจะช่วยลดเวลาในการตั้งค่าเมื่อทำการเรียก API ครั้งแรก
  • ใช้โทเค็นเพื่อการเข้าถึงซ้ำเมื่อเป็นไปได้ ซึ่งจะช่วยลดจำนวนการเดินทางไปกลับที่ไลบรารีของไคลเอ็นต์ Google Ads .NET ต้องดำเนินการเพื่อรีเฟรชโทเค็นเพื่อการเข้าถึง

ใช้โทเค็นเพื่อการเข้าถึงจากบัญชีระดับดูแลจัดการเมื่อเป็นไปได้

  • หากคุณมีโทเค็นเพื่อการเข้าถึงที่ออกให้ในระดับบัญชีดูแลจัดการ คุณสามารถใช้โทเค็นดังกล่าวเพื่อทำการเรียก API กับบัญชีลูกค้า Google Ads ทั้งหมดภายใต้ลำดับชั้นของบัญชีนั้น เมื่อใช้ร่วมกับการใช้อินสแตนซ์ GoogleAdsClient ซ้ำ วิธีนี้จะช่วยลดจำนวนการเดินทางไปกลับที่ไลบรารีของไคลเอ็นต์ต้องดำเนินการเพื่อรีเฟรชโทเค็นเพื่อการเข้าถึงได้อีก

ใช้ `SearchStream` แทน `Search` ทุกครั้งที่ทำได้

แม้ว่า GoogleAdsService.Search จะ ส่งคำขอแบบแบ่งหน้าหลายรายการเพื่อดาวน์โหลดรายงานทั้งหมดได้ แต่ GoogleAdsService.SearchStream จะส่งคำขอรายการเดียวและเริ่มต้นการเชื่อมต่อแบบต่อเนื่องกับ Google Ads API ไม่ว่ารายงานจะมีขนาดเท่าใดก็ตาม SearchStream อาจให้ประสิทธิภาพที่ดีกว่าการแบ่งหน้า เนื่องจากช่วยลดเวลาเครือข่ายในการเดินทางไปกลับ ที่ต้องใช้ในการขอแต่ละหน้าของการตอบกลับ Search ทั้งนี้ขึ้นอยู่กับ แอปของคุณ ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพนี้ได้ที่ 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 จะช่วยหลีกเลี่ยงจุดคอขวดด้านประสิทธิภาพและปรับปรุงการตอบสนองโดยรวมของแอป ไลบรารี Google Ads .NET จะสร้างวิธีการแบบไม่พร้อมกันสำหรับบริการและวิธีการ 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.V25.GoogleAdsService);

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

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

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

  • ระบบจัดการหน่วยความจำที่ไม่ใช้แล้วของเซิร์ฟเวอร์: ระบบจัดการหน่วยความจำที่ไม่ใช้แล้วของเซิร์ฟเวอร์ช่วยให้รันไทม์ .NET มอบประสิทธิภาพที่ดีขึ้นให้กับแอป Google Ads API โดยการทำงานในหลายเทรด ดูรายละเอียดเพิ่มเติมได้ในคู่มือนี้ คุณสามารถเปิดระบบจัดการหน่วยความจำที่ไม่ใช้แล้วของเซิร์ฟเวอร์ได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ .csproj ของแอป

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • ระบบจัดการหน่วยความจำที่ไม่ใช้แล้วแบบพร้อมกัน: คุณสามารถเปิดระบบจัดการหน่วยความจำที่ไม่ใช้แล้วแบบพร้อมกัน เพื่อให้ GC ของ .NET มีเทรดเฉพาะสำหรับการจัดการหน่วยความจำที่ไม่ใช้แล้วในรุ่นที่ 2 การตั้งค่านี้มีประโยชน์เมื่อประมวลผลรายงานที่มีขนาดใหญ่ คุณสามารถเปิดระบบจัดการหน่วยความจำที่ไม่ใช้แล้วแบบพร้อมกันได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ .csproj ของแอป

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

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

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