ऐप्लिकेशन की परफ़ॉर्मेंस

Google Ads .NET क्लाइंट लाइब्रेरी की मदद से, Google Ads API के साथ अपने ऐप्लिकेशन के इंटरैक्शन को आसान बनाया जा सकता है. इसके लिए, आपको कम से कम कॉन्फ़िगरेशन करना होगा. हालांकि, लाइब्रेरी की परफ़ॉर्मेंस इस बात पर निर्भर करती है कि उसका इस्तेमाल कैसे किया जाता है और उसे आपके ऐप्लिकेशन के साथ कैसे इंटिग्रेट किया जाता है.

इस गाइड में, .NET ऐप्लिकेशन के लिए परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के बारे में बताया गया है. साथ ही, इसमें सबसे सही तरीकों के बारे में भी बताया गया है. ये तरीके, Google Ads API पर लागू होते हैं.

जब भी हो सके, GoogleAdsClient का दोबारा इस्तेमाल करें

GoogleAdsClient, एपीआई कॉल करते समय उपयोगकर्ता के सेशन को दिखाता है. यह इन ऑप्टिमाइज़ेशन की सुविधा देता है:

  • यह कुकी, एपीआई सेवाओं के लिए इस्तेमाल किए जाने वाले gRPC चैनलों को कैश मेमोरी में सेव करती है. इससे शुरुआती एपीआई कॉल करते समय, सेटअप में लगने वाला समय कम हो जाता है.
  • जब भी हो सके, ऐक्सेस टोकन का फिर से इस्तेमाल करना. इससे Google Ads .NET क्लाइंट लाइब्रेरी को ऐक्सेस टोकन रीफ़्रेश करने के लिए, राउंड ट्रिप की संख्या कम करनी पड़ती है.

जब भी हो सके, मैनेजर लेवल के खाते से ऐक्सेस टोकन का इस्तेमाल करें

  • अगर आपके पास मैनेजर खाते के लेवल पर जारी किया गया ऐक्सेस टोकन है, तो इसका इस्तेमाल करके उस खाते की हाइरारकी में मौजूद सभी Google Ads क्लाइंट खातों के लिए एपीआई कॉल किए जा सकते हैं. GoogleAdsClient इंस्टेंस का फिर से इस्तेमाल करने पर, क्लाइंट लाइब्रेरी को ऐक्सेस टोकन रीफ़्रेश करने के लिए, राउंड ट्रिप की संख्या को और कम किया जा सकता है.

जब भी हो सके, Search के बजाय SearchStream का इस्तेमाल करें

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);

रिलीज़ के लिए तैयार बिल्ड के लिए कंपाइल करें

सर्वर पर डिप्लॉय करते समय, पक्का करें कि आपने अपने ऐप्लिकेशन को रिलीज़ कॉन्फ़िगरेशन का इस्तेमाल करके कंपाइल किया हो. डीबग कॉन्फ़िगरेशन का इस्तेमाल करने पर, आपका ऐप्लिकेशन पूरी सिंबॉलिक डीबग जानकारी के साथ कंपाइल होता है. इसमें कोई ऑप्टिमाइज़ेशन नहीं होता है.

अपने ऐप्लिकेशन की प्रोफ़ाइल बनाना

सीपीयू और मेमोरी के इस्तेमाल के लिए, अपने ऐप्लिकेशन की परफ़ॉर्मेंस की जांच करें. इससे परफ़ॉर्मेंस से जुड़ी समस्याओं का पता लगाया जा सकता है. Visual Studio, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए डाइग्नोस्टिक टूल उपलब्ध कराता है. इसके अलावा, कमर्शियल प्रोफ़ाइलिंग के अन्य टूल भी उपलब्ध हैं.

एसिंक्रोनस तरीकों का इस्तेमाल करना

async-await पैराडाइम का इस्तेमाल करके एसिंक्रोनस प्रोग्रामिंग से, परफ़ॉर्मेंस से जुड़ी समस्याओं से बचा जा सकता है. साथ ही, इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. Google Ads .NET लाइब्रेरी, सभी सेवाओं और आरपीसी तरीकों के लिए एसिंक तरीके जनरेट करती है.

एसिंक्रोनस तरीकों को रद्द करना

एसिंक तरीकों में CancellationToken पास करने के लिए, callSettings पैरामीटर का इस्तेमाल किया जा सकता है:

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.V20.GoogleAdsService);

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

जब भी हो सके, लॉगिंग की सुविधा बंद करें

Google Ads .NET लाइब्रेरी, डिफ़ॉल्ट रूप से लॉगिंग की सुविधा बंद कर देती है. साथ ही, यह लेज़ी लॉगिंग का इस्तेमाल करती है. इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है. अगर आपने लॉगिंग की सुविधा चालू की है, तो पक्का करें कि प्रोडक्शन एनवायरमेंट में इसे बंद कर दिया गया हो. अगर आपको प्रोडक्शन में, अनुरोधों के पूरा न होने की समस्या को मॉनिटर करना है, तो अपने ऐप्लिकेशन की परफ़ॉर्मेंस पर बुरा असर डाले बिना, इनमें से एक या उससे ज़्यादा तरीके अपनाए जा सकते हैं:

  • सिर्फ़ खास जानकारी वाले लॉग चालू करें.
  • पूरे लॉग को ERROR लेवल पर सेट करें.
  • अपने काम के अनुरोधों के आईडी सेव करें, ताकि उन्हें सहायता चैनलों के साथ शेयर किया जा सके.

ज़्यादा जानने के लिए, लॉगिंग गाइड देखें.

तय करें कि SearchStream या Search में से किस तरीके का इस्तेमाल करना है

Google Ads API, ऑब्जेक्ट वापस पाने के दो मुख्य तरीके उपलब्ध कराता है: Search तरीका (जो पेज नंबर के हिसाब से नतीजे दिखाता है) और SearchStream (जो स्ट्रीमिंग का इस्तेमाल करता है).

SearchStream, Search की तुलना में बेहतर परफ़ॉर्म करता है. हालांकि, कुछ ऐसे मामले भी होते हैं जिनमें Search को प्राथमिकता दी जाती है.

दोनों तरीकों के बारे में ज़्यादा जानने के लिए, स्ट्रीमिंग रिपोर्ट की गाइड देखें.

ReadyToRun विकल्प का इस्तेमाल करना

.NET Core 3.1 में, आपकी बाइनरी को किसी खास प्लैटफ़ॉर्म और आर्किटेक्चर के लिए पहले से कंपाइल करने की सुविधा जोड़ी गई है. इसके लिए, PublishReadyToRun सेटिंग को true पर सेट करें. इसके बाद, बाइनरी को पब्लिश करते समय, मान्य RuntimeIdentifier को सेट करके बाइनरी को पब्लिश करें. ज़्यादा जानने के लिए, ReadyToRun सुविधा के बारे में गाइड देखें.

Use TieredCompilation

TieredCompilation, .NET को हॉटस्पॉट की पहचान करने और उसकी परफ़ॉर्मेंस को बेहतर बनाने की अनुमति देता है. ReadyToRun विकल्प के साथ टियर वाली कंपाइलेशन सुविधा बेहतर तरीके से काम करती है. ऐसा इसलिए, क्योंकि अगर पहले से जनरेट की गई इमेज उपलब्ध है, तो इसका इस्तेमाल किया जा सकता है. ज़्यादा जानने के लिए, TieredCompilation के बारे में गाइड देखें.

गार्बेज कलेक्शन (जीसी) को बेहतर बनाना

.NET, गार्बेज कलेक्शन (जीसी) के लिए दो सामान्य प्रोफ़ाइलें उपलब्ध कराता है: वर्कस्टेशन प्रोफ़ाइल और सर्वर प्रोफ़ाइल. इन दोनों प्रोफ़ाइलों की परफ़ॉर्मेंस अलग-अलग होती है. Google Ads .NET लाइब्रेरी का इस्तेमाल करने वाले ऐप्लिकेशन, सर्वर प्रोफ़ाइल में चलने पर बेहतर परफ़ॉर्म करते हैं. नीचे दी गई GC सेटिंग को फ़ाइन ट्यून करके, बेहतर नतीजे पाए जा सकते हैं.

  • सर्वर गार्बेज कलेक्शन: सर्वर गार्बेज कलेक्शन की मदद से, .NET रनटाइम, Google Ads API ऐप्लिकेशन को बेहतर परफ़ॉर्मेंस दे सकता है. इसके लिए, वह कई थ्रेड पर काम करता है. ज़्यादा जानकारी के लिए, यह गाइड देखें. अपने ऐप्लिकेशन की .csproj फ़ाइल में यहां दी गई लाइनें जोड़कर, सर्वर गार्बेज कलेक्शन की सुविधा चालू की जा सकती है.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • कॉन्करेंट गार्बेज कलेक्शन: कॉन्करेंट गार्बेज कलेक्शन को चालू किया जा सकता है, ताकि .NET GC को जनरेशन 2 में गार्बेज कलेक्शन के लिए एक डेडीकेटेड थ्रेड मिल सके. यह सेटिंग, बड़ी रिपोर्ट को प्रोसेस करने के दौरान काम आ सकती है. अपने ऐप्लिकेशन की .csproj फ़ाइल में यहां दी गई लाइनें जोड़कर, एक साथ कई गार्बेज कलेक्शन चालू किए जा सकते हैं.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • वीएम गार्बेज कलेक्शन को बनाए रखें: RetainVMGarbageCollection सेटिंग यह कॉन्फ़िगर करती है कि वर्चुअल मेमोरी के उन सेगमेंट को स्टैंडबाय सूची में रखा जाए जिन्हें मिटाना है, ताकि उनका इस्तेमाल आने वाले समय में किया जा सके. इसके अलावा, यह भी कॉन्फ़िगर करती है कि उन्हें ऑपरेटिंग सिस्टम (ओएस) को वापस भेज दिया जाए. अपने ऐप्लिकेशन में ये लाइनें जोड़कर, वर्चुअल मेमोरी को बनाए रखने की सुविधा चालू की जा सकती है.

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

वर्कस्टेशन और सर्वर के बीच के सेटअप को चुनकर, अपने GC को बेहतर बनाया जा सकता है. ज़रूरी सभी सेटिंग आपके .NET Core ऐप्लिकेशन की runtimeconfig.json फ़ाइल, एनवायरमेंट वैरिएबल या .NET SDK ऐप्लिकेशन के App.config में दी गई हैं.