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 में डाइग्नोस्टिक टूल उपलब्ध हैं. इनकी मदद से, अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. इसके अलावा, कमर्शियल प्रोफ़ाइलिंग टूल भी उपलब्ध हैं.
एसिंक्रोनस तरीकों का इस्तेमाल करना
async-await पैराडाइम का इस्तेमाल करके एसिंक्रोनस प्रोग्रामिंग से, परफ़ॉर्मेंस से जुड़ी समस्याओं से बचने में मदद मिलती है. साथ ही, इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होती है. Google Ads .NET लाइब्रेरी, सभी सेवाओं और आरपीसी के तरीकों के लिए एसिंक तरीके जनरेट करती है.
एसिंक्रोनस तरीकों को रद्द करना
callSettings पैरामीटर का इस्तेमाल करके, CancellationToken को SearchStreamAsync जैसे एसिंक तरीकों पर भेजा जा सकता है:
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.V25.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 डिप्लॉयमेंट गाइड देखें.
Use TieredCompilation
TieredCompilation (यह .NET के नए वर्शन, जैसे कि .NET 8 में डिफ़ॉल्ट रूप से चालू होता है)
इसकी मदद से .NET, हॉटस्पॉट की पहचान कर पाता है और रनटाइम परफ़ॉर्मेंस को बेहतर बना पाता है. टायर्ड कंपाइलेशन, ReadyToRun के साथ अच्छी तरह से काम करता है. ऐसा इसलिए, क्योंकि यह तेज़ी से शुरू होने के लिए पहले से जनरेट की गई इमेज का इस्तेमाल कर सकता है. इसके बाद, पूरी तरह से ऑप्टिमाइज़ किए गए हॉट तरीकों को फिर से कंपाइल कर सकता है.
ज़्यादा जानने के लिए, TieredCompilation गाइड देखें.
गारबेज कलेक्शन (GC) को बेहतर बनाना
.NET, गार्बेज कलेक्शन (जीसी) के लिए दो सामान्य प्रोफ़ाइलें उपलब्ध कराता है: वर्कस्टेशन प्रोफ़ाइल और सर्वर प्रोफ़ाइल. इन दोनों प्रोफ़ाइलों की परफ़ॉर्मेंस में अंतर होता है. Google Ads .NET लाइब्रेरी का इस्तेमाल करने वाले सर्वर ऐप्लिकेशन, सर्वर प्रोफ़ाइल में चलाने पर अक्सर बेहतर परफ़ॉर्म करते हैं.
जीसी की इन सेटिंग को फ़ाइन-ट्यून करके फ़ायदा पाया जा सकता है:
सर्वर गार्बेज कलेक्शन: सर्वर गार्बेज कलेक्शन की मदद से, .NET रनटाइम, Google Ads API ऐप्लिकेशन को ज़्यादा थ्रूपुट दे सकता है. इसके लिए, वह कई GC हीप और थ्रेड पर काम करता है. ज़्यादा जानकारी के लिए, सर्वर जीसी गाइड देखें. अपने ऐप्लिकेशन की
.csprojफ़ाइल में ये लाइनें जोड़कर, सर्वर गार्बेज कलेक्शन की सुविधा चालू की जा सकती है:<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>कॉन्करेंट गारबेज कलेक्शन: .NET GC को जनरेशन 2 में गारबेज कलेक्शन के लिए एक डेडीकेटेड थ्रेड देने के लिए, कॉन्करेंट गारबेज कलेक्शन चालू किया जा सकता है. ज़्यादा डेटा वाली रिपोर्ट प्रोसेस करते समय, यह सेटिंग काम आ सकती है. अपने ऐप्लिकेशन की
.csprojफ़ाइल में ये लाइनें जोड़कर, एक साथ कई गार्बेज कलेक्शन चालू किए जा सकते हैं:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>वीएम गार्बेज कलेक्शन को बनाए रखें:
RetainVMGarbageCollectionसेटिंग यह कॉन्फ़िगर करती है कि वर्चुअल मेमोरी के उन सेगमेंट को स्टैंडबाय सूची में रखा जाए जिन्हें मिटाना है, ताकि उनका इस्तेमाल आने वाले समय में किया जा सके. इसके अलावा, यह भी कॉन्फ़िगर किया जा सकता है कि उन्हें ऑपरेटिंग सिस्टम (ओएस) को वापस कर दिया जाए. अपने ऐप्लिकेशन की.csprojफ़ाइल में ये लाइनें जोड़कर, वर्चुअल मेमोरी बनाए रखने की सुविधा चालू की जा सकती है:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
वर्कस्टेशन और सर्वर के व्यवहार को बैलेंस करने वाला सेटअप चुनकर, अपने GC को बेहतर बनाया जा सकता है. GC से जुड़ी सभी सेटिंग को .NET ऐप्लिकेशन की runtimeconfig.json फ़ाइल में, एनवायरमेंट वैरिएबल के ज़रिए या App.config में सेट किया जा सकता है.