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

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

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

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

এপিআই কল করার সময় GoogleAdsClient একজন ব্যবহারকারীর সেশনের প্রতিনিধিত্ব করে। এটি নিম্নলিখিত অপ্টিমাইজেশনগুলো প্রদান করে:

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

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

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

সম্ভব হলে Search-এর পরিবর্তে SearchStream ব্যবহার করুন।

গুগল অ্যাডস এপিআই অবজেক্ট পুনরুদ্ধার করার দুটি প্রধান উপায় প্রদান করে: GoogleAdsService.Search (যা পেজিনেশন ব্যবহার করে) এবং GoogleAdsService.SearchStream (যা স্ট্রিমিং ব্যবহার করে)।

সম্পূর্ণ রিপোর্ট ডাউনলোড করার জন্য Search একাধিক পেজযুক্ত অনুরোধ পাঠালেও, SearchStream রিপোর্টের আকার নির্বিশেষে একটিমাত্র অনুরোধ পাঠায় এবং গুগল অ্যাডস এপিআই-এর সাথে একটি স্থায়ী সংযোগ স্থাপন করে। Search রেসপন্সের প্রতিটি স্বতন্ত্র পেজের জন্য প্রয়োজনীয় রাউন্ড-ট্রিপ নেটওয়ার্ক সময় বাদ দেওয়ার মাধ্যমে, SearchStream সাধারণত পেজিংয়ের চেয়ে উন্নত পারফরম্যান্স প্রদান করে। কখন কোন পদ্ধতিটি বেছে নিতে হবে সে সম্পর্কে আরও জানতে স্ট্রিমিং রিপোর্ট গাইডটি দেখুন।

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

গুগল ক্লাউড ফাংশন-এর মতো কিছু স্টেটলেস পরিবেশে, বিভিন্ন ইনভোকেশনের ক্ষেত্রে 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);

রিলিজ বিল্ডের জন্য কম্পাইল করুন

সার্ভারে ডেপ্লয় করার সময় নিশ্চিত করুন যে আপনি আপনার অ্যাপটি রিলিজ কনফিগারেশন ব্যবহার করে কম্পাইল করছেন। ডিবাগ কনফিগারেশন ব্যবহার করলে, আপনার অ্যাপটি সম্পূর্ণ সিম্বলিক ডিবাগ তথ্যসহ এবং কম্পাইলার অপটিমাইজেশন ছাড়াই কম্পাইল হয়।

আপনার অ্যাপের প্রোফাইল তৈরি করুন

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

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

async-await প্যারাডাইম ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং পারফরম্যান্সের বাধা এড়াতে সাহায্য করে এবং আপনার অ্যাপের সার্বিক রেসপন্সিভনেস বাড়ায়। Google Ads .NET লাইব্রেরি সমস্ত সার্ভিস এবং RPC মেথডের জন্য async মেথড তৈরি করে।

অ্যাসিঙ্ক মেথড বাতিলকরণ

আপনি SearchStreamAsync মতো অ্যাসিঙ্ক মেথডগুলিতে CancellationToken পাস করার জন্য callSettings প্যারামিটারটি ব্যবহার করতে পারেন:

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 ডেপ্লয়মেন্ট গাইড দেখুন।

টিয়ার্ডকম্পাইলেশন ব্যবহার করুন

TieredCompilation (যা .NET 8-এর মতো আধুনিক .NET সংস্করণগুলিতে ডিফল্টরূপে সক্রিয় থাকে) .NET-কে হটস্পট শনাক্ত করতে এবং রানটাইম পারফরম্যান্স উন্নত করতে সাহায্য করে। টিয়ার্ড কম্পাইলেশন ReadyToRun সাথে ভালোভাবে কাজ করে, কারণ এটি দ্রুত স্টার্টআপের জন্য আগে থেকে তৈরি করা ইমেজ ব্যবহার করতে পারে এবং তারপর সম্পূর্ণ অপটিমাইজেশন সহ হট মেথডগুলোকে পুনরায় কম্পাইল করতে পারে। আরও জানতে TieredCompilation গাইডটি দেখুন।

আপনার গার্বেজ কালেকশন (GC) সূক্ষ্মভাবে সমন্বয় করুন।

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

নিম্নলিখিত GC সেটিংসগুলো সূক্ষ্মভাবে সমন্বয় করলে আপনি উপকৃত হতে পারেন:

  • সার্ভার গার্বেজ কালেকশন: সার্ভার গার্বেজ কালেকশন একাধিক GC হিপ এবং থ্রেডে কাজ করার মাধ্যমে .NET রানটাইমকে একটি 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 ফাইলে নির্দিষ্ট করা যেতে পারে।