অ্যাপ্লিকেশন পারফর্ম্যান্স

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 ব্যবহার করুন

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 প্রপার্টি ব্যবহার করে সরাসরি GoogleAdsConfig-এ আপনার নিজস্ব প্রি-কনফিগার করা ICredential ইনস্ট্যান্স ইনজেক্ট করতে এবং চ্যানেল ক্যাশিং (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 লাইব্রেরি সমস্ত পরিষেবা এবং RPC পদ্ধতির জন্য অ্যাসিঙ্ক পদ্ধতি তৈরি করে।

অ্যাসিঙ্ক্রোনাস পদ্ধতি বাতিলকরণ

আপনি 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.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 নির্দেশিকা দেখুন।

আপনার গার্বেজ কালেকশন (GC) ফাইন-টিউন করা

.NET গার্বেজ কালেকশনের (GC) জন্য দুটি সাধারণ প্রোফাইল প্রদান করে: একটি ওয়ার্কস্টেশন প্রোফাইল এবং একটি সার্ভার প্রোফাইল। এই দুটি প্রোফাইলের পারফর্ম্যান্স ট্রেড-অফ আলাদা। Google Ads .NET লাইব্রেরি ব্যবহার করা ডেডিকেটেড সার্ভার অ্যাপ সার্ভার প্রোফাইলে রান করলে প্রায়ই আরও ভালো পারফর্ম করে।

নিম্নলিখিত GC সেটিংস ফাইন-টিউন করে আপনি সুবিধা পেতে পারেন:

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

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

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

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

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