অ্যাপ্লিকেশন কর্মক্ষমতা

Google Ads .NET ক্লায়েন্ট লাইব্রেরি আপনার অ্যাপের Google Ads API-এর সাথে ইন্টারঅ্যাকশন সহজ করে, আপনার পক্ষ থেকে ন্যূনতম কনফিগারেশনের মাধ্যমে। তবে, সামগ্রিক কর্মক্ষমতা নির্ভর করে লাইব্রেরিটি কীভাবে ব্যবহার করা হয় এবং আপনার অ্যাপের সাথে কীভাবে সংহত করা হয় তার উপর।

এই নির্দেশিকাটি .NET অ্যাপের জন্য নির্দিষ্ট পারফরম্যান্স অপ্টিমাইজেশনগুলিকে অন্তর্ভুক্ত করে এবং Google Ads API-এর ক্ষেত্রে সাধারণত প্রযোজ্য সেরা অনুশীলনগুলিকে পরিপূরক করে।

যখনই সম্ভব GoogleAdsClient পুনঃব্যবহার করুন

API কল করার সময় GoogleAdsClient ব্যবহারকারীর সেশন উপস্থাপন করে। এটি অপ্টিমাইজেশন প্রদান করে যেমন:

  • API পরিষেবা দ্বারা ব্যবহৃত gRPC চ্যানেলগুলি ক্যাশে করা হচ্ছে। এটি প্রাথমিক API কল করার সময় সেটআপ সময় হ্রাস করে।
  • সম্ভব হলে অ্যাক্সেস টোকেন পুনঃব্যবহার করা। এটি Google Ads .NET ক্লায়েন্ট লাইব্রেরিকে অ্যাক্সেস টোকেন রিফ্রেশ করার জন্য যে রাউন্ড ট্রিপ করতে হয় তার সংখ্যা হ্রাস করে।

সম্ভব হলে ম্যানেজার লেভেল অ্যাকাউন্ট থেকে অ্যাক্সেস টোকেন ব্যবহার করুন

  • যদি আপনার কোনও ম্যানেজার অ্যাকাউন্ট লেভেলে একটি অ্যাক্সেস টোকেন ইস্যু করা থাকে, তাহলে আপনি সেই অ্যাকাউন্ট হায়ারার্কির অধীনে থাকা সমস্ত Google Ads ক্লায়েন্ট অ্যাকাউন্টের বিরুদ্ধে API কল করতে এটি ব্যবহার করতে পারেন। GoogleAdsClient ইনস্ট্যান্স পুনঃব্যবহারের সাথে মিলিত হলে, এটি অ্যাক্সেস টোকেন রিফ্রেশ করার জন্য ক্লায়েন্ট লাইব্রেরির রাউন্ড ট্রিপের সংখ্যা আরও কমাতে পারে।

যখনই সম্ভব Search এর পরিবর্তে SearchStream ব্যবহার করুন

GoogleAdsService.Search সম্পূর্ণ রিপোর্ট ডাউনলোড করার জন্য একাধিক পৃষ্ঠাঙ্কিত অনুরোধ পাঠাতে পারে, কিন্তু GoogleAdsService.SearchStream একটি একক অনুরোধ পাঠায় এবং রিপোর্টের আকার নির্বিশেষে Google Ads API-এর সাথে একটি স্থায়ী সংযোগ শুরু করে। আপনার অ্যাপের উপর নির্ভর করে, Search প্রতিক্রিয়ার প্রতিটি পৃষ্ঠার অনুরোধ করার জন্য প্রয়োজনীয় রাউন্ড-ট্রিপ নেটওয়ার্ক সময় বাদ দিয়ে, SearchStream পেজিংয়ের উপর উন্নত কর্মক্ষমতা প্রদান করতে পারে। এই অপ্টিমাইজেশন সম্পর্কে আরও জানতে Search বনাম SearchStream দেখুন।

অ্যাক্সেস টোকেন রিফ্রেশগুলি ম্যানুয়ালি পরিচালনা করুন

গুগল ক্লাউড ফাংশনের মতো কিছু পরিবেশে, 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 এবং মেমরি ব্যবহারের জন্য আপনার অ্যাপের প্রোফাইল তৈরি করুন। ভিজ্যুয়াল স্টুডিও আপনার অ্যাপের প্রোফাইল তৈরিতে সাহায্য করার জন্য ডায়াগনস্টিক টুল সরবরাহ করে। এছাড়াও অন্যান্য বাণিজ্যিক প্রোফাইলিং টুল উপলব্ধ রয়েছে।

অ্যাসিঙ্ক পদ্ধতি ব্যবহার করুন

অ্যাসিঙ্ক-অপেক্ষার প্যারাডাইম ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং কর্মক্ষমতা বাধা এড়াতে এবং আপনার অ্যাপের সামগ্রিক প্রতিক্রিয়াশীলতা উন্নত করতে সাহায্য করে। 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.V22.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 বৈশিষ্ট্যের নির্দেশিকাটি দেখুন।

TieredCompilation ব্যবহার করুন

TieredCompilation .NET কে হটস্পট সনাক্ত করতে এবং এর কর্মক্ষমতা উন্নত করতে সাহায্য করে। ReadyToRun বিকল্পের সাথে Tiered কম্পাইলেশন আরও ভালোভাবে কাজ করে কারণ এটি উপলব্ধ থাকলে পূর্বে তৈরি করা ছবি ব্যবহার করতে পারে। আরও জানতে TieredCompilation এর নির্দেশিকাটি দেখুন।

আপনার আবর্জনা সংগ্রহ (GC) সূক্ষ্ম করুন

.NET আবর্জনা সংগ্রহের জন্য দুটি সাধারণ প্রোফাইল (GC) প্রদান করে: একটি ওয়ার্কস্টেশন প্রোফাইল এবং একটি সার্ভার প্রোফাইল। এই দুটি প্রোফাইলের পারফরম্যান্সের ভিন্নতা রয়েছে। Google Ads .NET লাইব্রেরি ব্যবহারকারী অ্যাপগুলি সার্ভার প্রোফাইলে চলাকালীন আরও ভালো পারফর্ম করে। নিম্নলিখিত GC সেটিংস সূক্ষ্মভাবে সমন্বয় করে আপনি উপকৃত হতে পারেন।

  • সার্ভার আবর্জনা সংগ্রহ: সার্ভার আবর্জনা সংগ্রহ .NET রানটাইমকে একাধিক থ্রেডে কাজ করে একটি Google Ads API অ্যাপকে আরও ভালো পারফরম্যান্স দিতে সাহায্য করে। আরও বিস্তারিত জানার জন্য এই নির্দেশিকাটি দেখুন। আপনার অ্যাপের .csproj ফাইলে নিম্নলিখিত লাইনগুলি যোগ করে আপনি সার্ভার আবর্জনা সংগ্রহ চালু করতে পারেন।

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • সমকালীন আবর্জনা সংগ্রহ: আপনি দ্বিতীয় প্রজন্মে .NET GC-কে আবর্জনা সংগ্রহের জন্য একটি ডেডিকেটেড থ্রেড দেওয়ার জন্য সমকালীন আবর্জনা সংগ্রহ চালু করতে পারেন। বড় আকারের রিপোর্ট প্রক্রিয়াকরণের সময় এই সেটিংটি কার্যকর হতে পারে। আপনার অ্যাপের .csproj ফাইলে নিম্নলিখিত লাইনগুলি যোগ করে আপনি সমকালীন আবর্জনা সংগ্রহ চালু করতে পারেন।

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM আবর্জনা সংগ্রহ ধরে রাখুন: RetainVMGarbageCollection সেটিংটি কনফিগার করে যে ভার্চুয়াল মেমোরির যে অংশগুলি মুছে ফেলা উচিত সেগুলি ভবিষ্যতে ব্যবহারের জন্য স্ট্যান্ডবাই তালিকায় রাখা হবে, নাকি অপারেটিং সিস্টেমে (OS) ফিরে প্রকাশ করা হবে। আপনি আপনার অ্যাপে নিম্নলিখিত লাইনগুলি যোগ করে ভার্চুয়াল মেমোরি ধরে রাখা চালু করতে পারেন।

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

আপনি একটি ওয়ার্কস্টেশন এবং একটি সার্ভারের মধ্যে একটি সেটআপ সেট করে আপনার GC টিউন করতে পারেন। সমস্ত প্রাসঙ্গিক সেটিংস আপনার .NET Core অ্যাপের runtimeconfig.json ফাইলে, একটি পরিবেশ ভেরিয়েবলে, অথবা আপনার .NET SDK অ্যাপের App.config নির্দিষ্ট করা আছে।