একটি "মেমরি ফুটো" এর অ্যানাটমি


172

নেট পরিপ্রেক্ষিতে:

  • স্মৃতি ফুটো কাকে বলে ?
  • আপনার অ্যাপ্লিকেশন ফাঁস কিনা তা আপনি কীভাবে নির্ধারণ করতে পারেন? এর প্রভাব কী?
  • কিভাবে আপনি একটি স্মৃতি ফাঁস রোধ করতে পারেন?
  • যদি আপনার অ্যাপ্লিকেশনটিতে মেমরি ফাঁস হয়, প্রক্রিয়াটি বের হয়ে যায় বা মারা গেলে এটি কি চলে যাবে? বা আপনার অ্যাপ্লিকেশনটিতে মেমরি ফাঁস প্রক্রিয়া সমাপ্তির পরেও সিস্টেমে অন্য প্রক্রিয়াগুলিকে প্রভাবিত করে?
  • এবং সিওএম ইন্টারপ এবং / বা পি / ইনভোকের মাধ্যমে অ্যাক্সেসবিহীন কোড সম্পর্কে কী বলা যায়?

উত্তর:


110

আমি সবচেয়ে ভাল ব্যাখ্যাটি দেখেছি প্রোগ্রামিং ই-বুকের ফাউন্ডেশন ফ্রি ফাউন্ডেশনের of অধ্যায়ে ।

মূলত, .NET- এ কোনও স্মৃতি ফাঁস হয় যখন রেফারেন্সযুক্ত বস্তুগুলি মূল হয় এবং সুতরাং আবর্জনা সংগ্রহ করা যায় না। এটি ঘটনাক্রমে ঘটে যখন আপনি উদ্দেশ্য ক্ষেত্রের বাইরে রেফারেন্স ধরে রাখেন।

আপনি জানতে পারবেন যে আপনি যখন আউট অফ মেমোরি এক্সেপশন পেতে শুরু করেন বা আপনার মেমরির ব্যবহার আপনার প্রত্যাশার চেয়ে বেশি হয় ( পারফিমনের দুর্দান্ত মেমরি কাউন্টার রয়েছে)।

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

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

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


11
ওহ তুমি কি বই পছন্দ কর? আমি লেখককে সময়ে সময়ে স্ট্যাকওভারফ্লোতে পপ আপ করতে দেখেছি।
জনো নোলান

কিছু .NET অবজেক্টগুলিও নিজেদেরকে রুট করে তুলতে পারে না। আইডিজিপোজযোগ্য যে কোনও কিছুই এর কারণেই নিষ্পত্তি করা উচিত।
কিরিউ

1
@ কিরিয়ু: কীভাবে কোনও বস্তু নিজেই শিকড় দেয়?
আন্দ্রে রিনিয়া

2
@ আন্ড্রেই: আমি মনে করি একটি চলমান থ্রেড সম্ভবত কোনও বস্তুর মূল নির্ধারণের সর্বোত্তম উদাহরণ। স্ট্যাটিক অ-জনসাধারণের অবস্থান (যেমন কোনও স্ট্যাটিক ইভেন্টের সাবস্ক্রাইব করা, বা স্ট্যাটিক ফিল্ড ইনিশিয়েশন দ্বারা সিঙ্গেলটন বাস্তবায়ন করা) এমন কোনও অবজেক্ট নিজেই মূলোড়িত হতে পারে, যেহেতু ... এর কোনও সুস্পষ্ট উপায় নেই m ... এটি উপহাস থেকে "উপড়ে"
জেফ্রি হ্যান্টিন

@ জেফরি যা ঘটছে তা বর্ণনা করার জন্য এটি একটি অবিস্মরণীয় উপায় এবং আমি এটি পছন্দ করি!
এক্সিটোস

35

কড়া কথায় বলতে গেলে, একটি মেমরি ফাঁস মেমরি গ্রাস করে যা প্রোগ্রাম দ্বারা "আর ব্যবহৃত হয় না"।

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

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

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

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


32

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

আপনার অ্যাপ্লিকেশন ফাঁস হচ্ছে কিনা তা কীভাবে বুঝতে হবে

একটি আকর্ষণীয় উপায় হ'ল পারফিউম খুলুন এবং সমস্ত স্তূপে # বাইট এবং # জেনার 2 সংগ্রহের জন্য ট্রেস যুক্ত করুন , প্রতিটি ক্ষেত্রে আপনার প্রক্রিয়াটি কেবল তাকান। যদি কোনও নির্দিষ্ট বৈশিষ্ট্য অনুশীলন করার ফলে মোট বাইটগুলি বাড়তে থাকে এবং পরবর্তী জেন 2 সংগ্রহের পরেও সেই মেমরি বরাদ্দ থাকে, আপনি বলতে পারেন যে বৈশিষ্ট্যটি মেমরি ফাঁস করে।

কিভাবে প্রতিরোধ

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

প্রক্রিয়াটি প্রস্থান করার পরে কি ফুটোটি চলে যায়, এবং সিওএম ইন্টারপ সম্পর্কে কী হবে?

যখন আপনার প্রক্রিয়াটি প্রস্থান করে, তার ঠিকানা স্পেসে ম্যাপযুক্ত সমস্ত মেমরি ডিএলএল থেকে পরিবেশন করা কোনও সিওএম অবজেক্ট সহ ওএস দ্বারা পুনরুদ্ধার করে। তুলনামূলকভাবে খুব কমই, COM অবজেক্টগুলি পৃথক প্রক্রিয়া থেকে পরিবেশন করা যেতে পারে। এই ক্ষেত্রে, যখন আপনার প্রক্রিয়াটি প্রস্থান করে, আপনি এখনও যে কোনও সিওএম সার্ভার প্রসেসগুলিতে ব্যবহৃত মেমরির জন্য বরাদ্দ হতে পারেন।


19

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

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

আমি নিম্নলিখিত চেষ্টা এবং নিশ্চিত করতে হবে:

ক) আইডিস্পোজেবল কার্যকর করে এমন প্রতিটি জিনিস শেষ অবধি ব্যবহার করে নিষ্পত্তি করা হয় বা ব্যবহারের বিবৃতিতে ব্রাশ, কলম ইত্যাদি অন্তর্ভুক্ত থাকে (কিছু লোক যুক্তি দিয়ে কিছুতেই কিছু সেট করার পক্ষে যুক্তি দেয়)

খ) নিকটতম পদ্ধতিযুক্ত যে কোনও কিছুই শেষ অবধি বা ব্যবহারের বিবৃতিটি ব্যবহার করে আবার বন্ধ করা হবে (যদিও আমি ব্যবহারের সন্ধান পেয়েছি তবে আপনি যদি স্টেটমেন্টের বাইরের বিষয়টি ঘোষনা করেন তবে নির্ভর করে সবসময় বন্ধ হয় না)

গ) আপনি যদি নিয়ন্ত্রণহীন কোড / উইন্ডোজ এপিআই ব্যবহার করেন তবে এগুলি সঠিকভাবে মোকাবেলা করা হয়েছে। (কারও কারও কাছে রিসোর্সগুলি মুক্ত করার পদ্ধতি রয়েছে)

আশাকরি এটা সাহায্য করবে.


19

NET- এ মেমরি ফুটো হওয়ার দরকার হলে এই লিঙ্কগুলি পরীক্ষা করে দেখুন:

http://msdn.microsoft.com/en-us/magazine/cc163833.aspx

http://msdn.microsoft.com/en-us/magazine/cc164138.aspx

এই নিবন্ধগুলি বর্ণনা করে যে কীভাবে আপনার প্রক্রিয়াটির একটি মেমরি ডাম্প তৈরি করা যায় এবং কীভাবে এটি বিশ্লেষণ করা যায় যাতে আপনি প্রথমে নির্ধারণ করতে পারেন যে আপনার ফাঁসটি পরিচালনা করা হয় না বা পরিচালনা করা হয় এবং যদি এটি পরিচালিত হয় তবে কীভাবে আসে তা নির্ধারণ করতে।

মাইক্রোসফ্টের অ্যাডপ্লাস প্রতিস্থাপনের জন্য ক্র্যাশ ডাম্প তৈরির ক্ষেত্রে সহায়তা করার জন্য একটি নতুন সরঞ্জাম রয়েছে, যাকে ডাবুডিয়াগ বলে।

http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en


16

মাইক্রোসফ্ট থেকে সিএলআর প্রোফাইলার ব্যবহার করা http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en কোন বস্তু মেমরি ধারণ করে, নির্বাহের প্রবাহকে কী নেতৃত্ব দেয় তা নির্ধারণ করার একটি দুর্দান্ত উপায় এই অবজেক্টগুলি তৈরি করতে, এবং গাদাতে কোথায় কোন অবজেক্টগুলি বাস করে তা পর্যবেক্ষণ করে (টুকরোজ, এলওএইচ, ইত্যাদি)।


15

জঞ্জাল সংগ্রহকারী কীভাবে কাজ করে তার সর্বোত্তম ব্যাখ্যা হ'ল জেফ রিখটারস সিএলআর-এ সি # বইয়ের মাধ্যমে , (Ch। 20)। এটি পড়া কীভাবে বস্তুগুলি বজায় থাকে তা বোঝার দুর্দান্ত ভিত্তি দেয়।

দুর্ঘটনাবশত অবজেক্টগুলি রুট করার অন্যতম সাধারণ কারণ হ'ল ঘটনাগুলি শ্রেণীর বাইরে বেরিয়ে আসা by যদি আপনি একটি বাহ্যিক ইভেন্ট হুক আপ

যেমন

SomeExternalClass.Changed += new EventHandler(HandleIt);

এবং যখন আপনি নিষ্পত্তি করবেন তখন এটিকে ছুঁড়ে ফেলতে ভুলে যান, তারপরে SomeExternClass এর আপনার ক্লাসে একটি রেফার রয়েছে।

উপরে উল্লিখিত হিসাবে, সায়টেক মেমরি প্রোফাইলার আপনি সন্দেহ করছেন এমন বস্তুর শিকড় দেখানোর ক্ষেত্রে দুর্দান্ত।

তবে একটি নির্দিষ্ট ধরণের যাচাইয়ের খুব দ্রুত উপায় রয়েছে কেবল ডাব্লুএনডিবিজি ব্যবহার করুন (সংযুক্ত থাকাকালীন আপনি ভিএস.এনইটি তাত্ক্ষণিক উইন্ডোতে এটি ব্যবহার করতে পারেন):

.loadby sos mscorwks
!dumpheap -stat -type <TypeName>

এখন এমন কিছু করুন যা আপনার মনে হয় সেই ধরণের অবজেক্টগুলি নিষ্পত্তি করবে (উদাহরণস্বরূপ উইন্ডোটি বন্ধ করুন)। ডিবাগ বোতামটি কোথাও চলবে তা এখানে সহজSystem.GC.Collect() বার কয়েক।

তারপরে !dumpheap -stat -type <TypeName>আবার দৌড়াও । যদি নম্বরটি কমে না যায় বা আপনি যতটা প্রত্যাশা করেন নি তেমন না নামলে আপনার আরও তদন্তের একটি ভিত্তি রয়েছে। ( ইনগো র্যামার প্রদত্ত একটি সেমিনার থেকে আমি এই টিপটি পেয়েছি )।


14

আমার ধারণা একটি পরিচালিত পরিবেশে, একটি ফুটো হ'ল আপনি চারপাশের স্মৃতিতে অযৌক্তিক রেফারেন্স রাখছেন।


11

লোকেরা কেন মনে করে যে কোনও মেমরি ফুটে উঠেছে। নেট অন্য কোনও ফুটোয়ের মতো নয়?

মেমোরি ফুটো হ'ল আপনি যখন কোনও সংস্থার সাথে সংযুক্ত হন এবং এটিকে যেতে দেন না। আপনি এটি পরিচালনা করা এবং পরিচালনাবিহীন কোডিং উভয় ক্ষেত্রেই করতে পারেন।

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

জিসি এবং অন্যান্য যাদু আপনার জগাখিচুড়ি পরিষ্কার করে দেবে এই বিশ্বাসটি মেমরি ফাঁসের স্বল্পতম উপায় এবং পরে খুঁজে পাওয়া মুশকিল।

নিয়ন্ত্রণহীন কোডিং করার সময়, আপনি সাধারণত পরিষ্কার করার বিষয়টি নিশ্চিত করেন, আপনি জানেন যে যে সম্পদ আপনি ধরে রাখছেন সেগুলি আপনার দায়িত্বে নয়, পরিষ্কার করার দায়িত্ব হবে।

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

পরিচালিত পদে আমি আমার ঘাড় লাইনে রেখে বলব প্রক্রিয়াটি মারা যাওয়ার পরে / অপসারণের পরে এটি চলে যায় না।

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

আপনি যদি ব্রাউজারে অন্য কোনও ট্যাব খুলেন তবে কোনও সাইটে সার্ফ করুন, তারপরে যে অন্য ট্যাবটি ব্রাউজারটি ফাঁস করে দিয়েছে তা হোস্ট করা ট্যাবটি বন্ধ করুন, আপনি কি মনে করেন যে ব্রাউজারটি স্মৃতি ছেড়ে দেবে? আইই এর সাথে নয় Not আমার কম্পিউটারে আইই যদি আমি গুগল রিডার ব্যবহার করি তবে খুব সহজেই অল্প সময়ে (প্রায় 3-4 দিন) 1 জিবিবি মেমরি খাবেন। কিছু সংবাদপত্র আরও খারাপ।


10

আমার ধারণা একটি পরিচালিত পরিবেশে, একটি ফুটো হ'ল আপনি চারপাশের স্মৃতিতে অযৌক্তিক রেফারেন্স রাখছেন।

একেবারে। এছাড়াও, নিষ্পত্তিযোগ্য বস্তুগুলিতে .Dispose () পদ্ধতিটি ব্যবহার না করা হলে যথাযথভাবে মেম ফাঁস হতে পারে। এটি করার সবচেয়ে সহজ উপায় হ'ল একটি ব্যবহার ব্লক কারণ এটি স্বয়ংক্রিয়ভাবে কার্যকর হয়।

StreamReader sr;
using(sr = new StreamReader("somefile.txt"))
{
    //do some stuff
}

এবং যদি আপনি এমন কোনও শ্রেণি তৈরি করেন যা অব্যবস্থাপনাযুক্ত অবজেক্টগুলি ব্যবহার করে, আপনি যদি সঠিকভাবে পরিচয়যোগ্য না প্রয়োগ করেন তবে আপনি আপনার শ্রেণীর ব্যবহারকারীদের জন্য মেমরি ফাঁস হতে পারেন।


9

সমস্ত মেমরি ফুটো প্রোগ্রাম সমাপ্তির মাধ্যমে সমাধান করা হয়।

পর্যাপ্ত মেমরি ফাঁস এবং অপারেটিং সিস্টেম আপনার পক্ষ থেকে সমস্যার সমাধান করার সিদ্ধান্ত নিতে পারে।


8

আমি বার্নার্ডের সাথে সম্মতি জানাব যে। মেম ফুটো কী হবে net

আপনি আপনার অ্যাপ্লিকেশনটির মেমোরির ব্যবহারটি দেখতে প্রোফাইল করতে পারেন এবং এটি নির্ধারণ করতে পারেন যে এটি যদি মেমরির প্রচুর পরিমাণে পরিচালনা করে না তবে যখন এটি না হয় আপনি বলতে পারেন যে এটি ফাঁস হয়েছে।

পরিচালিত পদে আমি আমার ঘাড় লাইনে রেখে বলব প্রক্রিয়াটি মারা যাওয়ার পরে / অপসারণের পরে এটি চলে যায় না।

পরিচালনা না করা কোডটি তার নিজস্ব জন্তু এবং যদি এর মধ্যে একটি ফুটো থাকে তবে এটি একটি মানক মেমো অনুসরণ করবে। ফাঁস সংজ্ঞা


7

এও মনে রাখবেন যে .NET এর দুটি হ্যাপ রয়েছে, একটি হ'ল লার্জ অবজেক্ট হিপ। আমি বিশ্বাস করি যে প্রায় 85 কিলোমিটার বা তারও বেশি বড় আইটেমগুলি এই গাদাতে রাখা হয়েছে। এই গাদাটির নিয়মিত স্তূপের চেয়ে আজীবন নিয়ম রয়েছে।

যদি আপনি বড় মেমরি স্ট্রাকচার (অভিধানের বা তালিকার) তৈরি করেন তবে সঠিক বিধিগুলি কী তা অনুসন্ধান করা বুদ্ধিমানের কাজ।

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

COM অবজেক্টগুলি কৃপণ হতে পারে। আপনি যদি সর্বদা IDisposeপ্যাটার্নটি ব্যবহার করেন তবে আপনি নিরাপদ থাকবেন। তবে আমি প্রয়োগ করেছি এমন কয়েকটি আন্তঃসম্পাদক সমিতিগুলি জুড়ে IDisposeMarshal.ReleaseCOMObjectআপনি যখন এটি সম্পন্ন করেছেন তখন এখানে চাবিটি কল । COM অবজেক্টস এখনও স্ট্যান্ডার্ড COM রেফারেন্স গণনা ব্যবহার করে।


6

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


1

একটি সংজ্ঞাটি হ'ল: অ্যাক্সেসযোগ্য মেমরিটি প্রকাশ করতে অক্ষম, যা বরাদ্দ প্রক্রিয়া চালানোর সময় আর নতুন প্রক্রিয়াতে বরাদ্দ করা যায় না। এটি বেশিরভাগই সিসি কৌশল ব্যবহার করে বা স্বয়ংক্রিয় সরঞ্জামগুলি দ্বারা সনাক্ত করে নিরাময় করা যায়।

আরও তথ্যের জন্য, দয়া করে http://all-about-java-and-weblogic-server.blogspot.in/2014/01/ কি-is-memory-leak-in-java.html দেখুন

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