Google Ads .NET क्लाइंट लाइब्रेरी, Google Ads API के साथ आपके ऐप्लिकेशन के इंटरैक्शन को आसान बनाती है. इसके लिए, आपको कम से कम कॉन्फ़िगरेशन करना पड़ता है. हालांकि, पूरी परफ़ॉर्मेंस इस बात पर निर्भर करती है कि लाइब्रेरी का इस्तेमाल कैसे किया जाता है और उसे आपके ऐप्लिकेशन के साथ कैसे इंटिग्रेट किया जाता है.
इस गाइड में, .NET ऐप्लिकेशन के लिए परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के बारे में बताया गया है. साथ ही, इसमें Google Ads API के लिए आम तौर पर लागू होने वाले सबसे सही तरीकों के बारे में भी बताया गया है.
जब भी संभव हो, GoogleAdsClient का फिर से इस्तेमाल करें
GoogleAdsClient, एपीआई कॉल करते समय उपयोगकर्ता के सेशन को दिखाता है. यह ऑप्टिमाइज़ेशन की ये सुविधाएं देता है:
- एपीआई सेवाओं के इस्तेमाल किए जाने वाले gRPC चैनलों को कैश मेमोरी में सेव करना. इससे शुरुआती एपीआई कॉल करते समय, सेटअप में लगने वाला समय कम हो जाता है.
- जब भी संभव हो, ऐक्सेस टोकन का फिर से इस्तेमाल करना. इससे, Google Ads .NET क्लाइंट लाइब्रेरी को ऐक्सेस टोकन रीफ़्रेश करने के लिए, कम बार अनुरोध करना पड़ता है.
जब भी संभव हो, मैनेजर लेवल के खाते से ऐक्सेस टोकन इस्तेमाल करें
अगर आपके पास मैनेजर खाते के लेवल पर जारी किया गया ऐक्सेस टोकन है, तो उसका इस्तेमाल करके उस खाते की हैरारकी में मौजूद सभी Google Ads क्लाइंट खातों के लिए एपीआई कॉल किए जा सकते हैं.
GoogleAdsClient इंस्टेंस को फिर से इस्तेमाल करने के साथ-साथ, इससे क्लाइंट लाइब्रेरी को ऐक्सेस टोकन रीफ़्रेश करने के लिए, दोतरफ़ा यात्राओं की संख्या को और कम किया जा सकता है.
जब भी संभव हो, Search के बजाय SearchStream का इस्तेमाल करें
Google Ads API, ऑब्जेक्ट को वापस पाने के दो मुख्य तरीके उपलब्ध कराता है:
GoogleAdsService.Search (जो पेजिनेशन का इस्तेमाल करता है) और
GoogleAdsService.SearchStream
(जो स्ट्रीमिंग का इस्तेमाल करता है).
Search, पूरी रिपोर्ट डाउनलोड करने के लिए, पेज के हिसाब से कई अनुरोध भेजता है. वहीं, SearchStream एक ही अनुरोध भेजता है और रिपोर्ट के साइज़ की परवाह किए बिना, Google Ads API के साथ लगातार कनेक्शन बनाए रखता है. Search रिस्पॉन्स के हर पेज का अनुरोध करने के लिए, नेटवर्क के दोतरफ़ा समय को खत्म करके, SearchStream आम तौर पर पेजिंग की तुलना में बेहतर परफ़ॉर्मेंस देता है. स्ट्रीमिंग रिपोर्ट की गाइड देखें. इससे आपको यह जानने में मदद मिलेगी कि किस तरीके को कब चुनना चाहिए.
ऐक्सेस टोकन को रीफ़्रेश करने की प्रोसेस को मैन्युअल तरीके से मैनेज करना
Google Cloud Functions जैसे कुछ स्टेटलेस एनवायरमेंट में, ऐसा हो सकता है कि अलग-अलग कॉल के लिए, GoogleAdsClient इंस्टेंस का फिर से इस्तेमाल न किया जा सके.
इस तरह के एनवायरमेंट में, डेटा को बनाए रखने और उसका फिर से इस्तेमाल करने के लिए, अपने सबसे सही तरीके होते हैं.
Google.Ads.GoogleAds v27.0.0 और इसके बाद के वर्शन में, Credentials प्रॉपर्टी का इस्तेमाल करके, पहले से कॉन्फ़िगर किए गए ICredential इंस्टेंस को सीधे GoogleAdsConfig पर इंजेक्ट किया जा सकता है. साथ ही, चैनल कैश मेमोरी (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);
रिलीज़ के लिए तैयार बिल्ड के लिए कंपाइल करना
सर्वर पर डिप्लॉय करते समय, पक्का करें कि आपने रिलीज़ कॉन्फ़िगरेशन का इस्तेमाल करके, अपने ऐप्लिकेशन को कंपाइल किया हो. डीबग कॉन्फ़िगरेशन का इस्तेमाल करने पर, आपका ऐप्लिकेशन डीबग करने की पूरी जानकारी के साथ कंपाइल होता है. साथ ही, कंपाइलर ऑप्टिमाइज़ेशन के बिना कंपाइल होता है.
अपने ऐप्लिकेशन की प्रोफ़ाइल बनाना
सीपीयू और मेमोरी के इस्तेमाल, दोनों के लिए अपने ऐप्लिकेशन की प्रोफ़ाइल बनाएं, ताकि परफ़ॉर्मेंस में आने वाली रुकावटों की पहचान की जा सके. Visual Studio में डाइग्नोस्टिक टूल उपलब्ध हैं. इनकी मदद से, ऐप्लिकेशन की प्रोफ़ाइल बनाई जा सकती है. इसके अलावा, प्रोफ़ाइल बनाने वाले अन्य कमर्शियल टूल भी उपलब्ध हैं.
एसिंक्रोनस तरीकों का इस्तेमाल करना
एसिंक-अवेट पैराडाइम का इस्तेमाल करके एसिंक्रोनस प्रोग्रामिंग करने से, परफ़ॉर्मेंस में आने वाली रुकावटों से बचा जा सकता है. साथ ही, इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है. Google Ads .NET लाइब्रेरी, सभी सेवाओं और आरपीसी के लिए एसिंक तरीके जनरेट करती है.
एसिंक्रोनस तरीके रद्द करना
callSettings पैरामीटर का इस्तेमाल करके, SearchStreamAsync जैसे एसिंक्रोनस तरीकों में CancellationToken को पास किया जा सकता है:
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.V26.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
},
callSettings);
जब चाहें, तब लॉगिंग की सुविधा बंद करें
Google Ads .NET लाइब्रेरी, डिफ़ॉल्ट रूप से लॉगिंग की सुविधा बंद कर देती है. साथ ही, लेज़ी लॉगिंग का इस्तेमाल करती है. इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है. अगर आपने डेवलपमेंट के दौरान लॉगिंग की सुविधा चालू की है, तो पक्का करें कि आपने प्रोडक्शन एनवायरमेंट में इसे बंद कर दिया हो. अगर आपको प्रोडक्शन में, अनुरोधों के पूरा न होने की वजहों पर नज़र रखनी है, तो इनमें से एक या उससे ज़्यादा तरीके अपनाए जा सकते हैं. इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस पर कोई बुरा असर नहीं पड़ेगा:
- सिर्फ़ खास जानकारी वाले लॉग चालू करें.
- पूरे लॉग को
ERRORलेवल पर सेट करें. - अनुरोध पूरा न होने पर, अनुरोध आईडी को सेव करें, ताकि उसे सहायता चैनलों के साथ शेयर किया जा सके.
ज़्यादा जानने के लिए, लॉगिंग गाइड देखें.
ReadyToRun विकल्प का इस्तेमाल करना
मॉडर्न .NET, आपकी बाइनरी को किसी खास प्लैटफ़ॉर्म और आर्किटेक्चर के लिए पहले से कंपाइल करने की सुविधा देता है. इसके लिए, PublishReadyToRun को true पर सेट करें. इसके बाद, मान्य RuntimeIdentifier की जानकारी देकर बाइनरी को पब्लिश करें. ज़्यादा जानने के लिए, ReadyToRun डिप्लॉयमेंट गाइड देखें.
TieredCompilation का इस्तेमाल करें
TieredCompilation (यह .NET 8 जैसे आधुनिक .NET वर्शन में डिफ़ॉल्ट रूप से चालू होता है)
की मदद से, .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सेटिंग से यह कॉन्फ़िगर किया जाता है कि वर्चुअल मेमोरी के जिन सेगमेंट को मिटाया जाना चाहिए उन्हें आने वाले समय में इस्तेमाल करने के लिए स्टैंडबाय सूची में रखा जाए या ऑपरेटिंग सिस्टम (ओएस) में वापस भेज दिया जाए. वर्चुअल मेमोरी को बनाए रखने की सुविधा चालू करने के लिए, अपने ऐप्लिकेशन की.csprojफ़ाइल में ये लाइनें जोड़ें:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
वर्कस्टेशन और सर्वर के व्यवहार को संतुलित करने वाला सेटअप चुनकर, जीसी को बेहतर बनाया जा सकता है. जीसी की सभी ज़रूरी सेटिंग को आपके .NET ऐप्लिकेशन की runtimeconfig.json फ़ाइल में, एनवायरमेंट वैरिएबल के ज़रिए या आपके App.config में तय किया जा सकता है.