.NET- এ মেমরি ফাঁসের সন্ধানের জন্য কোন কৌশল এবং সরঞ্জামগুলি কার্যকর?


152

আমি 10 বছরের জন্য সি ++ লিখেছি। আমি মেমরির সমস্যার সম্মুখীন হয়েছি, তবে সেগুলি যুক্তিসঙ্গত পরিশ্রমের সাথে স্থির করা যেতে পারে।

গত কয়েক বছর ধরে আমি সি # লিখছি। আমি এখনও মনে করি প্রচুর স্মৃতি সমস্যা আছে। অ নির্ধারণের কারণে তাদের নির্ণয় এবং সংশোধন করা কঠিন এবং সি # দর্শনটি হ'ল যখন আপনি খুব স্পষ্টভাবে করেন তখন আপনাকে এ জাতীয় জিনিসগুলির বিষয়ে চিন্তা করতে হবে না।

একটি বিশেষ সমস্যা যা আমি পাই তা হ'ল আমাকে কোডের সমস্ত কিছু স্পষ্টভাবে নিষ্পত্তি করতে হবে এবং পরিষ্কার করতে হবে। যদি আমি এটি না করি, তবে মেমরির প্রোফাইলাররা সত্যিই সহায়তা করে না কারণ আপনার সম্পর্কে প্রচুর পরিমাণে ভাসমান ভাসমান রয়েছে যা তারা আপনাকে দেখানোর চেষ্টা করছে এমন সমস্ত ডেটার মধ্যে কোনও ফুটো খুঁজে পাবে না। আমি ভাবছি যদি আমার কাছে ভুল ধারণা আছে, বা আমি যে সরঞ্জামটি পেয়েছি তা যদি সেরা না হয়।

.NET- এ মেমরি ফাঁস মোকাবেলার জন্য কোন ধরণের কৌশল এবং সরঞ্জামগুলি কার্যকর?


আপনার পোস্টের শিরোনামটি সত্যিই আপনার পোস্টের প্রশ্নের সাথে মেলে না। আমি আপনাকে আপনার শিরোনাম আপডেট করার পরামর্শ দিচ্ছি।
কেভিন

তুমি ঠিক বলছো. দুঃখিত, আমি যে বর্তমান ফুটো শিকার করছি তাতে কিছুটা বিরক্ত হয়ে যাচ্ছিলাম! শিরোনাম আপডেট হয়েছে।
স্কট ল্যাংহাম

3
@ স্কট: নেট থেকে বিরক্ত হবেন না, সমস্যা নেই is আপনার কোড হয়।
জিওচেট

3
হ্যাঁ, আমার কোড, বা তৃতীয় পক্ষের লাইব্রেরিগুলি ব্যবহার করার জন্য আমি আনন্দিত।
স্কট ল্যাংহাম

@ স্কট: আমার উত্তর দেখুন। মেমপ্রফিলার এটি মূল্যবান। এটি ব্যবহার করা আপনাকে। নেট নেট জিসি ওয়ার্ল্ড সম্পর্কে সম্পূর্ণ নতুন স্তরের বোঝার সুযোগ দেবে।
জিওচেট

উত্তর:


51

আমি যখন মেমরি ফাঁস হওয়ার বিষয়ে সন্দেহ করি তখন আমি স্কিচের মেমপ্রোফিলার ব্যবহার করি।

এখন পর্যন্ত, আমি এটি খুব নির্ভরযোগ্য এবং শক্তিশালী বলে মনে করেছি। এটি কমপক্ষে একটি অনুষ্ঠানে আমার বেকন সংরক্ষণ করেছে।

জিসি। নেট আইএমওতে খুব ভাল কাজ করে, তবে অন্য কোনও ভাষা বা প্ল্যাটফর্মের মতো, আপনি যদি খারাপ কোড লিখেন, খারাপ জিনিস ঘটে।


3
হ্যাঁ, এইটির সাথে আমার যেতে হয়েছিল এবং এটি আমাকে কিছু জটিল ফুটোয়ের তলায় যেতে সহায়তা করেছিল। তৃতীয় পক্ষের লাইব্রেরিগুলির দ্বারা আন্তঃব্যবস্থাবদ্ধ কোডগুলিতে আন্তঃব্যক্তির মাধ্যমে অ্যাক্সেস করা সবচেয়ে বড় ফুটো হয়ে গেছে The আমি মুগ্ধ হয়েছিলাম যে এই সরঞ্জামটি পরিচালনা না করা কোডের পাশাপাশি পরিচালনা করা কোডগুলিতে ফাঁস সনাক্ত করেছে।
স্কট ল্যাংহাম

1
আমি এটিকে উত্তর হিসাবে গ্রহণ করেছি কারণ এটি আমার জন্য শেষ পর্যন্ত কী কাজ করেছিল তবে আমি মনে করি অন্যান্য উত্তরগুলি খুব কার্যকর। যাইহোক, এই সরঞ্জামটিকে বেশি বলা হয় সায়টেকের মেম প্রোফাইলার!
স্কট ল্যাংহাম

41

ভুলে যাওয়া থেকে নিষ্পত্তি করার সমস্যার জন্য, এই ব্লগ পোস্টে বর্ণিত সমাধানটি চেষ্টা করুন । এখানে সারাংশ:

    public void Dispose ()
    {
        // Dispose logic here ...

        // It's a bad error if someone forgets to call Dispose,
        // so in Debug builds, we put a finalizer in to detect
        // the error. If Dispose is called, we suppress the
        // finalizer.
#if DEBUG
        GC.SuppressFinalize(this);
#endif
    }

#if DEBUG
    ~TimedLock()
    {
        // If this finalizer runs, someone somewhere failed to
        // call Dispose, which means we've failed to leave
        // a monitor!
        System.Diagnostics.Debug.Fail("Undisposed lock");
    }
#endif

আমি ডিবাগের পরিবর্তে একটি ব্যতিক্রম ছুঁড়তে পছন্দ করব ailফেল
পেড্রো 77

17

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

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

সম্পাদনা: "চাহিদা বাড়ানো" বলতে আমি কী বোঝাতে চাইছি তার আরও ব্যাখ্যা এখানে। আমাদের ডাটাবেসের আমাদের অবজেক্টের মডেলটিতে আমরা শিশু অবজেক্ট (গুলি) এক্সপোজ করতে পিতামাতার বস্তুর বৈশিষ্ট্যগুলি ব্যবহার করি। উদাহরণস্বরূপ যদি আমাদের কাছে এমন কিছু রেকর্ড থাকে যা একের সাথে একের ভিত্তিতে কিছু অন্যান্য "বিশদ" বা "অনুসন্ধান" রেকর্ডকে রেফারেন্স করে থাকে তবে আমরা এটিকে এভাবে গঠন করতাম:

class ParentObject
   Private mRelatedObject as New CRelatedObject
   public Readonly property RelatedObject() as CRelatedObject
      get
         mRelatedObject.getWithID(RelatedObjectID)
         return mRelatedObject
      end get
   end property
End class

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

class ParentObject
   Private mRelatedObject as CRelatedObject
   Public ReadOnly Property RelatedObject() as CRelatedObject
      Get
         If mRelatedObject is Nothing
            mRelatedObject = New CRelatedObject
         End If
         If mRelatedObject.isEmptyObject
            mRelatedObject.getWithID(RelatedObjectID)
         End If
         return mRelatedObject
      end get
   end Property
end class

এটি আরও কার্যকর হিসাবে প্রমাণিত হয়েছিল কারণ অবজেক্টগুলি প্রয়োজন না হওয়া অবধি স্মৃতি থেকে দূরে রাখা হয়েছিল (গেট পদ্ধতিটি অ্যাক্সেস করা হয়েছিল)। এটি ডাটাবেস হিটকে সীমাবদ্ধ করতে এবং মেমরির জায়গাগুলিতে বিশাল লাভের একটি দুর্দান্ত কর্মক্ষমতা প্রদান করেছে boo


আমি এই পণ্য দ্বিতীয়। এটি আমি ব্যবহার করা সেরা প্রোফাইলগুলির মধ্যে একটি ছিল।
গর্ড

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

ঠিক আছে, নতুন সংস্করণ 5.1, অনেক বেশি উন্নত। ফাঁসের কারণ অনুসন্ধানে আপনাকে সহায়তা করা আরও ভাল (যদিও - এটির সাথে এখনও বেশ কয়েকটি সমস্যা রয়েছে যা এএনটিএস আমাকে জানিয়েছে যে তারা পরবর্তী সংস্করণে সমাধান করবে)। তবুও পরিচালনা ব্যবস্থাবিহীন কোডটি করে না তবে আপনি যদি পরিচালনা না করা কোড সম্পর্কে বিরক্ত না হন তবে এটি এখন একটি দুর্দান্ত সরঞ্জাম।
স্কট ল্যাংহাম

7

আপনার অ্যাপ্লিকেশন যদি তুচ্ছ না হয় আপনি ম্যানেজড কোড লেখার সময় মেমরির বিষয়ে এখনও চিন্তা করতে হবে। আমি দুটি জিনিস প্রস্তাব করব: প্রথমত, সি # এর মাধ্যমে সিএলআর পড়ুন কারণ এটি আপনাকে। নেট এ মেমরি পরিচালনা বুঝতে সাহায্য করবে। দ্বিতীয়ত, সিএলআরপ্রফিলার (মাইক্রোসফ্ট) এর মতো একটি সরঞ্জাম ব্যবহার করতে শিখুন । এটি আপনাকে কীভাবে আপনার স্মৃতিশক্তি ফাঁস হতে পারে তার একটি ধারণা দিতে পারে (উদাহরণস্বরূপ আপনি আপনার বৃহত অবজেক্টের হিপ টুকরো টুকরো করতে পারেন)


হাঁ। সিএলআরপিআরফিলারটি বেশ দুর্দান্ত। এটি আপনাকে বরাদ্দকৃত বস্তুগুলি দেয় এমন দর্শন দিয়ে খনন করার চেষ্টা করার সময় এটি তথ্য সহ কিছুটা বিস্ফোরক পেতে পারে, তবে সবকিছু সেখানে রয়েছে। এটি অবশ্যই একটি ভাল সূচনা পয়েন্ট, বিশেষত এটি বিনামূল্যে হিসাবে।
স্কট ল্যাংহ্যাম

6

আপনি কি নিয়ন্ত্রণহীন কোড ব্যবহার করছেন? মাইক্রোসফ্টের মতে আপনি যদি নিয়ন্ত্রণহীন কোড ব্যবহার না করেন তবে প্রচলিত অর্থে মেমরি ফাঁস সম্ভব নয়।

কোনও অ্যাপ্লিকেশন দ্বারা ব্যবহৃত মেমরিটি তবে প্রকাশিত হতে পারে না, সুতরাং অ্যাপ্লিকেশনটির মেমরির বরাদ্দ অ্যাপ্লিকেশনটির সারা জীবন বাড়তে পারে।

মাইক্রোসফট.কম এ সাধারণ ভাষার রানটাইমে মেমরি ফাঁস কীভাবে চিহ্নিত করবেন তা থেকে

আপনি যখন অ্যাপ্লিকেশনটির অংশ হিসাবে নিয়ন্ত্রণহীন কোড ব্যবহার করেন একটি নেট ফ্রেমওয়ার্ক অ্যাপ্লিকেশনটিতে একটি মেমরি ফাঁস হতে পারে। এই ব্যবস্থাবিহীন কোড মেমরি ফাঁস করতে পারে এবং .NET ফ্রেমওয়ার্ক রানটাইম সেই সমস্যাটির সমাধান করতে পারে না।

অতিরিক্তভাবে, কোনও প্রকল্পে কেবল মেমরি ফাঁস হতে পারে। এই শর্তটি ঘটতে পারে যদি অনেকগুলি বড় অবজেক্ট (যেমন ডেটাটেবিল অবজেক্টস) ঘোষণা করা হয় এবং তারপরে কোনও সংকলনে যুক্ত করা হয় (যেমন ডেটাসেট)। এই অবজেক্টগুলির মালিকানাধীন সংস্থানগুলি কখনও প্রকাশিত হতে পারে না এবং প্রোগ্রামের পুরো চালানোর জন্য এই সংস্থানগুলি জীবিত রেখে যায়। এটি একটি ফুটো বলে মনে হচ্ছে তবে প্রোগ্রামটিতে মেমরিটি যেভাবে বরাদ্দ করা হচ্ছে এটি কেবল এটি একটি লক্ষণ।

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

একটি সাধারণ ভুল হ'ল ইভেন্ট হ্যান্ডলারগুলি সরিয়ে না দেওয়া যা কোনও জিনিসের সাবস্ক্রাইব করে। ইভেন্টের হ্যান্ডলার সাবস্ক্রিপশনটি কোনও বিষয়টিকে পুনর্ব্যবহারযোগ্য হওয়া থেকে আটকাবে। এছাড়াও, ব্যবহারের বিবৃতিটি একবার দেখুন যা আপনাকে কোনও উত্সের আজীবন সীমাবদ্ধ সুযোগ তৈরি করতে দেয়।


5
ব্লগস.এমএসডিএন / টেস / আর্কাইভ / ২০০6/০//২০১ ./২ দেখুন । মেমরি ফাঁস "traditionalতিহ্যবাহী" কিনা তা আসলেই গুরুত্বপূর্ণ নয়, এটি এখনও ফাঁস।
কনস্টান্টিন

2
আমি আপনার বক্তব্যটি দেখছি - তবে কোনও প্রোগ্রামের দ্বারা অদক্ষ বরাদ্দ এবং মেমরির পুনঃব্যবহার মেমরি ফাঁসের চেয়ে আলাদা।
টিমোথি লি রাসেল

ভাল উত্তর, ইভেন্ট হ্যান্ডলারগুলি বিপজ্জনক হতে পারে তা আমাকে মনে রাখার জন্য আপনাকে ধন্যবাদ।
frameworkninja

3
@ টিমোথি লি রাসেল: সময়মতো ফ্যাশনে এটির নিষ্ক্রিয় করার জন্য প্রয়োজনীয় তথ্য ও প্রেরণার সিস্টেমে কোনও তথ্য ছাড়াই যদি অবাঞ্ছিত (১) পরিমাণ মেমরি একই সাথে বরাদ্দ (2) হয়ে যায় তবে এটি একটি স্মৃতি ফাঁস । এমনকি স্মৃতি যদি কোনও দিন মুক্ত হয়, এমনকি যদি এটির আগে সিস্টেমটিকে শ্বাসরোধ করার জন্য পর্যাপ্ত অকেজো জিনিসগুলি জমা হতে পারে তবে এটি একটি ফুটো। (1) হে (এন) এর চেয়ে বৃহত্তর, এন কার্যকর বরাদ্দের পরিমাণ; (২) স্টাফ যদি অকার্যকর হয় তবে এর উল্লেখগুলি মুছে ফেলা হলে প্রোগ্রামের কার্যকারিতা প্রভাবিত হবে না।
সুপারক্যাট 18'11

2
@ টিমোথি লি রাসেল: সাধারণ "মেমরি ফুটো" প্যাটার্নটি ঘটে যখন মেমোরি অন্য সত্তার পক্ষে এক সত্তা দ্বারা ধারণ করা হয় , যখন আর প্রয়োজন হয় না তখন তা বলা হওয়ার প্রত্যাশা করে, তবে দ্বিতীয়টি প্রথমটিকে না বলেই সত্তাকে ত্যাগ করে। মেমরিটি ধারণ করে থাকা সত্তার সত্যই এটির প্রয়োজন হয় না তবে এটি নির্ধারণের কোনও উপায় নেই।
সুপারক্যাট

5

এই ব্লগে উইন্ডবজি এবং অন্যান্য সরঞ্জামগুলি ব্যবহার করে সমস্ত ধরণের স্মৃতি মেমরি ফাঁস ট্র্যাক করতে সত্যই দুর্দান্ত কিছু পদক্ষেপ আছে rough আপনার দক্ষতা বিকাশের জন্য দুর্দান্ত পড়া।


5

আমি ঠিক একটি উইন্ডোজ পরিষেবাটিতে একটি মেমরি ফুটো করেছি, যা আমি ঠিক করেছি।

প্রথম, আমি মেমপ্রফিলার চেষ্টা করেছিলাম । আমি এটি ব্যবহার করা সত্যই কঠিন এবং ব্যবহারকারীর পক্ষে বন্ধুত্বপূর্ণ নয়।

তারপরে, আমি জাস্টট্রেস ব্যবহার করেছি যা ব্যবহার করা সহজ এবং আপনাকে সঠিকভাবে নিষ্পত্তি না করা অবজেক্টগুলি সম্পর্কে আরও বিশদ প্রদান করে।

এটি আমাকে মেমরি ফুটোটি খুব সহজেই সমাধান করতে দেয়।


3

আপনি যে ফুটো পর্যবেক্ষণ করছেন তা যদি পলাতক ক্যাশে প্রয়োগের কারণে হয় তবে এটি এমন একটি দৃশ্য যা আপনি WeakReferences ব্যবহার বিবেচনা করতে চাইতে পারেন। এটি মেমরিটি প্রয়োজনীয় হলে প্রকাশিত হয়েছে তা নিশ্চিত করতে সহায়তা করতে পারে।

যাইহোক, আইএমএইচও এটি একটি বিসপোক সমাধান বিবেচনা করা ভাল only কেবলমাত্র আপনি সত্যই জানেন যে আপনার কতক্ষণ অবজেক্টগুলি রাখা উচিত, তাই আপনার অবস্থার জন্য উপযুক্ত হাউসকিপিং কোড ডিজাইন করা সাধারণত সর্বোত্তম পন্থা।


3

আমি জেটব্রেন থেকে ডটমেমরি পছন্দ করি


আপনিই একমাত্র হতে পারেন :)
হেলবাবি

আমিও চেষ্টা করেছিলাম। আমি মনে করি এটি একটি ভাল সরঞ্জাম। ব্যবহারে সহজ, তথ্যপূর্ণ। ভিসুয়াল স্টুডিও থেকে সংহত
redeye

আমাদের ক্ষেত্রে, সমস্যা সমাধানের মেমরি ফাঁস হওয়ার সময়, ভিজ্যুয়াল স্টুডিও স্ন্যাপশট সরঞ্জামটি ক্র্যাশ করে / স্ন্যাপশট দেয় নি। ডটমেমরি তার দুর্দান্ত এবং 3+ গিগাবাইটের একাধিক স্ন্যাপশটগুলি (আপাতদৃষ্টিতে) স্বাচ্ছন্দ্যের সাথে পরিচালনা করে।
মাইকেল কারগল

3

বড় বন্দুক - উইন্ডোজ জন্য ডিবাগিং সরঞ্জাম

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

"যদি এটি ভাঙা হয় ..." ব্লগে বিষয়টিতে খুব দরকারী নিবন্ধ রয়েছে।


2

আপনার অবজেক্টের রেফারেন্সগুলির উপর নজর রাখা সবচেয়ে ভাল জিনিস। আপনি যে বিষয়ে আর চিন্তা করেন না এমন অবজেক্টের সাথে ঝুলন্ত রেফারেন্স সহ শেষ হওয়া খুব সহজ। আপনি যদি আর কিছু ব্যবহার না করে থাকেন তবে এ থেকে মুক্তি পান।

স্লাইডিং এর মেয়াদ সহ ক্যাশে সরবরাহকারী ব্যবহার করার অভ্যস্ত হয়ে উঠুন, যাতে কোনও কাঙ্ক্ষিত সময় উইন্ডোটির জন্য উল্লেখ না করা থাকলে তা অবহেলিত হয় এবং পরিষ্কার হয়। তবে এটি যদি খুব বেশি অ্যাক্সেস করা হয় তবে এটি স্মৃতিতে বলবে।


2

সেরা সরঞ্জাম এক ব্যবহার করা হয় Windows এর জন্য ডিবাগ টুলস , এবং ব্যবহার প্রক্রিয়ার একটি মেমরি ডাম্প গ্রহণ adplus , তারপর ব্যবহার windbg এবং SOS প্রক্রিয়া মেমরি, থ্রেড, এবং কল স্ট্যাকগুলি বিশ্লেষণ প্লাগইন।

সার্ভারগুলিতেও সমস্যা চিহ্নিত করার জন্য আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন, সরঞ্জামগুলি ইনস্টল করার পরে, ডিরেক্টরিটি ভাগ করে নিন, তারপরে (নেট ব্যবহার) ব্যবহার করে সার্ভার থেকে ভাগটি সংযুক্ত করুন এবং হয় ক্রাশ করুন বা প্রক্রিয়াটির হ্যাং ডাম্প নিন।

তারপরে অফলাইনে বিশ্লেষণ করুন।


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

2

পরিচালিত অ্যাপ্লিকেশনটির জন্য আমার এক ফিক্সের পরে আমার একই জিনিস ছিল যেমন আমার পরবর্তী পরিবর্তনের পরেও আমার অ্যাপ্লিকেশনটিতে একই মেমরি ফাঁস হবে না তা যাচাই করতে হবে, সুতরাং আমি অবজেক্ট রিলিজ যাচাইকরণ কাঠামোর মতো কিছু লিখেছি, দয়া করে একবার দেখুন নুগেট প্যাকেজ অবজেক্টরিলেভেরিফিকেশন । আপনি এখানে একটি নমুনা পেতে পারেন https://github.com/outcoldman/OutcoldSolutions-ObjectReleaseVerifications- নমুনা , এবং এই নমুনা সম্পর্কে তথ্য http://outcoldman.ru/en/blog/show/322


0

ভিজ্যুয়াল স্টুডিও 2015 থেকে মেমরি ব্যবহারের ডেটা সংগ্রহ এবং বিশ্লেষণের জন্য মেমরি ইউজ ডায়াগনস্টিক টুলটি বাক্সের বাইরে ব্যবহার করার কথা বিবেচনা করুন।

মেমোরি ব্যবহারের সরঞ্জাম আপনাকে অবজেক্টের ধরণের মেমরির ব্যবহারের প্রভাব বোঝার জন্য পরিচালিত এবং নেটিভ মেমরি হিপগুলির এক বা একাধিক স্ন্যাপশট নিতে দেয়।


0

আমি এর ডটমেমরিটি ব্যবহার করেছিলাম এমন সেরা সরঞ্জামগুলির মধ্যে একটি আপনি এই সরঞ্জামটিকে ভিএস.এফ.একটি এক্সটেনশন হিসাবে ব্যবহার করতে পারেন আপনার অ্যাপ্লিকেশনটি চালান আপনি মেমরির প্রতিটি অংশ (অবজেক্ট, নেমস্পেস ইত্যাদি দ্বারা) বিশ্লেষণ করতে পারেন যা আপনার অ্যাপ্লিকেশন ব্যবহার করে এবং এর কিছু স্ন্যাপশট নিতে পারে , অন্যান্য স্ন্যাপশটগুলির সাথে এটি তুলনা করুন। DotMemory

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.