সি # তে কীভাবে স্মৃতি উপলব্ধ বা ব্যবহৃত হবে


136

অ্যাপ্লিকেশন দ্বারা ব্যবহৃত র‌্যাম বা মেমরি আমি কীভাবে পেতে পারি?


আপনার System.Diagnostics.Processক্লাসটি একবার দেখে নেওয়া উচিত ।
রোনাল্ড ওয়াইল্ডেনবার্গ

3
দ্রষ্টব্য, বর্তমানে ব্যবহৃত শারীরিক র্যামটি হচ্ছে ওয়ার্কিং সেট, মেমরি বরাদ্দকৃত ব্যক্তিগত বা ভাগ করা বাইটগুলিতে পড়ে (বরাদানের ধরণের উপর নির্ভর করে)।
রিচার্ড 10

উত্তর:


172

তুমি ব্যবহার করতে পার:

Process proc = Process.GetCurrentProcess();

বর্তমান প্রক্রিয়াটি পেতে এবং ব্যবহার করতে:

proc.PrivateMemorySize64;

ব্যক্তিগত মেমরির ব্যবহার পেতে। আরও তথ্যের জন্য এই লিঙ্কটি দেখুন


52
সম্ভবত এটি লক্ষ করা উচিত যে গেটকন্ট্রনপ্রসেসটিতে একটি কল নিজে থেকেই যথেষ্ট সংস্থানগুলি বরাদ্দ করবে। সম্পন্ন হয়ে গেলে ফিরে আসা প্রক্রিয়াটিতে ডিসপোজ কল করুন বা পুরো কোডটি "ব্যবহার করে" স্কোপে মোড়ানো।
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

9
নেমস্পেস: সিস্টেম.ডায়াগনস্টিকস অ্যাসেমব্লী: সিস্টেম (System.dll এ)
এনিগমা প্লাস

12
আমি আরও যুক্ত করতে চাই যে রিফ্রেশ () না বলা পর্যন্ত প্রাইভেটমিটারসাইজ 64 সম্পত্তি (+ অন্যান্য বৈশিষ্ট্যগুলি) স্বয়ংক্রিয়ভাবে আপডেট হয় না। (এটি উপরের লিঙ্কে পৃষ্ঠায় উল্লেখ করা হয়েছে))
স্কটরহে

1
আরও উত্তরের জন্য এই অন্যান্য অনুরূপ প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো
অ্যারোন ডি

1
@ স্কটরহে আমি ভুল হলে আমাকে সংশোধন করুন - তবে আমি যুক্ত করব যে আপনি যে মুহূর্তে কল করবেন সেই মুহুর্তে সম্পত্তির মানগুলি "আপ টু ডেট" রয়েছে GetCurrentProcess, তবে সম্পত্তিটি অ্যাক্সেস করার আগে আপনি অন্য ক্রিয়াকলাপ চালিয়ে গেলে কেবল সতেজ হওয়া দরকার। উত্স - মন্তব্যগুলি বলে যে প্রক্রিয়া স্ন্যাপশট তৈরি হওয়ার মুহুর্তে বৈশিষ্ট্যগুলি সঠিক।
তাবসিনা

38

আপনি জিসি.গেটটোটালমোরি পদ্ধতিটি পরীক্ষা করতে চাইতে পারেন ।

এটি আবর্জনা সংগ্রহকারী কর্তৃক বরাদ্দকৃত বাইটের সংখ্যা পুনরুদ্ধার করে।


12
যদিও শুধুমাত্র পরিচালিত গাদাগুলিতে। আরকাইনের উত্তরটি দেশীয় এবং পরিচালিত হিপ উভয়ই দেওয়া উচিত।
ইয়াউর

25

সিস্টেম.এনভায়রনমেন্টের ওয়ার্কিংসেট রয়েছে - একটি -৪ -বিট স্বাক্ষরিত পূর্ণসংখ্যা সহ প্রসেসের প্রসঙ্গে ম্যাপযুক্ত শারীরিক মেমরির বাইট সংখ্যা রয়েছে।

আপনি যদি বিশদ চান তবে এখানে সিস্টেম.ডায়াগনস্টিকস P পারফরম্যান্স কাউন্টার রয়েছে তবে এটি সেটআপ করার জন্য আরও কিছুটা চেষ্টা করা হবে।


সিস্টেমটি উপলব্ধ / ব্যবহৃত মেমরি পাওয়ার জন্য আপনি কীভাবে পারফরম্যান্স কাউন্টার ব্যবহার করবেন তার উদাহরণ (বা অন্য কেউ) দিতে পারেন?
সৃষ্টির

11

দেখুন এখানে বিস্তারিত জানার জন্য।

private PerformanceCounter cpuCounter;
private PerformanceCounter ramCounter;
public Form1()
{
    InitializeComponent();
    InitialiseCPUCounter();
    InitializeRAMCounter();
    updateTimer.Start();
}

private void updateTimer_Tick(object sender, EventArgs e)
{
    this.textBox1.Text = "CPU Usage: " +
    Convert.ToInt32(cpuCounter.NextValue()).ToString() +
    "%";

    this.textBox2.Text = Convert.ToInt32(ramCounter.NextValue()).ToString()+"Mb";
}

private void Form1_Load(object sender, EventArgs e)
{
}

private void InitialiseCPUCounter()
{
    cpuCounter = new PerformanceCounter(
    "Processor",
    "% Processor Time",
    "_Total",
    true
    );
}

private void InitializeRAMCounter()
{
    ramCounter = new PerformanceCounter("Memory", "Available MBytes", true);

}

আপনি যদি 0 হিসাবে মান পান তবে এটি NextValue()দুটিবার কল করা দরকার । তারপরে এটি সিপিইউ ব্যবহারের প্রকৃত মান দেয়। আরও বিশদ এখানে দেখুন


6

ছাড়াও @JesperFyhrKnudsen এর উত্তর এবং @MathiasLykkegaardLorenzen এর মন্তব্যে, আপনি ভাল চাই disposeফিরেProcess এটি ব্যবহার করেন।

সুতরাং, এর নিষ্পত্তি করার জন্য Process, আপনি এটিকে একটি usingসুযোগে মোড়ানো করতে পারেন বা Disposeফিরে আসা প্রক্রিয়াতে কল করতে পারেন ( procপরিবর্তনশীল) on

  1. using সুযোগ:

    var memory = 0.0;
    using (Process proc = Process.GetCurrentProcess())
    {
        // The proc.PrivateMemorySize64 will returns the private memory usage in byte.
        // Would like to Convert it to Megabyte? divide it by 2^20
           memory = proc.PrivateMemorySize64 / (1024*1024);
    }
  2. বা Disposeপদ্ধতি:

    var memory = 0.0;
    Process proc = Process.GetCurrentProcess();
    memory = Math.Round(proc.PrivateMemorySize64 / (1024*1024), 2);
    proc.Dispose();

এখন আপনি memoryভেরিয়েবলটি মেগাবাইটে রূপান্তর করতে পারেন।


3
এনবি: এক মেগাবাইট 2 ^ 20 নয় 1e + 6
হাইলিয়ান

1
এক নোট. সি # ^তে বিটওয়াইজ এক্সওর, পাওয়ার নয় not সুতরাং কেবল ব্যবহার করুন proc.PrivateMemorySize64 / (1024*1024), বাproc.PrivateMemorySize64 / (1 << 20)
Рыбаков

আপনি প্রথম বন্ধনী মিস করেছেন, কারণ proc.PrivateMemorySize64 / (1024 * 1024)হিসাবে বিভাগের চেয়ে গুণটির অগ্রাধিকার নেই।
লরিয়ানাস লাজাউসকাস

@ লৌরিনাস লাজাউস্কাস আমি উত্তরটি আপডেট করেছি। ধন্যবাদ।
আহমদ পায়ান

0

সম্পূর্ণ সিস্টেমের জন্য আপনি মাইক্রোসফ্ট.ভিজুয়ালবাসিক ফ্রেমওয়ার্ককে একটি রেফারেন্স হিসাবে যুক্ত করতে পারেন;

 Console.WriteLine("You have {0} bytes of RAM",
        new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory);
        Console.ReadLine();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.