คุณจะได้รับ RAM ทั้งหมดที่คอมพิวเตอร์มีได้อย่างไร?


89

เมื่อใช้ C # ฉันต้องการได้รับจำนวน RAM ทั้งหมดที่คอมพิวเตอร์ของฉันมี ด้วย PerformanceCounter ฉันสามารถรับจำนวน ram ที่พร้อมใช้งานได้โดยการตั้งค่า:

counter.CategoryName = "Memory";
counter.Countername = "Available MBytes";

แต่ดูเหมือนฉันจะหาวิธีรับจำนวนหน่วยความจำทั้งหมดไม่ได้ ฉันจะทำสิ่งนี้ได้อย่างไร?

อัปเดต:

MagicKat: ฉันเห็นว่าตอนที่ฉันค้นหา แต่มันใช้ไม่ได้ - "คุณไม่มีชุดประกอบหรือข้อมูลอ้างอิงหรือไม่" ฉันต้องการเพิ่มสิ่งนั้นในการอ้างอิง แต่ฉันไม่เห็นที่นั่น

คำตอบ:


63

GlobalMemoryStatusExสามารถเรียกใช้ฟังก์ชัน Windows API ด้วย p / invoke:

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  private class MEMORYSTATUSEX
  {
     public uint dwLength;
     public uint dwMemoryLoad;
     public ulong ullTotalPhys;
     public ulong ullAvailPhys;
     public ulong ullTotalPageFile;
     public ulong ullAvailPageFile;
     public ulong ullTotalVirtual;
     public ulong ullAvailVirtual;
     public ulong ullAvailExtendedVirtual;
     public MEMORYSTATUSEX()
     {
        this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
     }
  }


  [return: MarshalAs(UnmanagedType.Bool)]
  [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);

จากนั้นใช้เช่น:

ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{ 
   installedMemory = memStatus.ullTotalPhys;
}

หรือคุณสามารถใช้ WMI (มีการจัดการ แต่ช้ากว่า) เพื่อสอบถามTotalPhysicalMemoryในWin32_ComputerSystemคลาส


2
ไม่ได้ผล ... long ramuse = (long) stat.TotalPhysical; long ramavailable = (ยาว) stat.AvailablePhysical; ramtotal ยาว = ramavailable + ramuse; int เปอร์เซ็นต์ = (int) ((float) ramuse / ramtotal * 100); เปอร์เซ็นต์กำลังบอกฉันว่า "70" และทั้งหมดมีการเปลี่ยนแปลงตลอดเวลาให้หรือรับ 100 ควรเป็น 72%
Joel

5
รหัสใช้งานได้เพียงคุณไม่จำเป็นต้องใช้ 'NativeMethods' เพื่อรับขนาดของวัตถุคุณก็สามารถพูดได้เช่นนี้this.dwLength = (uint)Marshal.SizeOf(this);และมันก็ใช้งานได้เหมือนกัน (ฉันมีปัญหากับการใช้ NativeMethods ดังนั้นการแก้ไขนี้จึงใช้งานได้)
Cipi

2
"NativeMethods" คือเนมสเปซของประเภท การเรียกใช้ SizeOf สามารถเปลี่ยนแปลงได้หากต้องการ
Philip Rieck

2
@Corelgott ไร้ประโยชน์เพราะให้ข้อมูลที่ทันสมัย? ฉันหมายความว่าทุกครั้งที่ฉันตรวจสอบช่องอากาศจะให้ข้อมูลที่แตกต่างกัน แต่ฉันจะไม่ไปไกลถึงขนาดที่เรียกว่าไร้ประโยชน์โดยสิ้นเชิง ฉันไม่แน่ใจด้วยซ้ำว่าคุณต้องการให้ฟังก์ชันนี้ทำอะไรหากไม่ส่งคืนข้อมูลที่อาจแตกต่างกันในแต่ละครั้งควร "ล็อก" ผลลัพธ์หลังจากการเรียกใช้ครั้งแรกแล้วส่งคืนข้อมูลเก่าหลังจากนั้นหรือไม่ จะมีประโยชน์มากกว่าในทางใด
Philip Rieck

2
ไปงานเลี้ยงสายนิดหน่อย แต่ฉันบังเอิญเจอกระทู้นี้และคำตอบนี้ไม่ถูก GlobalMemoryStatusEx ไม่จำเป็น (และมักจะไม่) ให้จำนวน RAM จริงที่ติดตั้งบนเครื่องให้จำนวนที่มีอยู่ในระบบปฏิบัติการซึ่งเกือบจะแตกต่างจากจำนวนที่ติดตั้งเนื่องจากหน่วยความจำที่สงวนไว้สำหรับไดรเวอร์เป็นต้น หากต้องการรับจำนวน RAM ที่ติดตั้งจริงคุณต้องเรียกใช้ฟังก์ชัน GetPhysicallyInstalledSystemMemory ซึ่งส่งคืน RAM ทั้งหมดที่เหมาะสม msdn.microsoft.com/en-us/library/windows/desktop/…
Mike Johnson

183

เพิ่มข้อมูลอ้างอิงMicrosoft.VisualBasicและกusing Microsoft.VisualBasic.Devices;.

ComputerInfoชั้นมีข้อมูลทั้งหมดที่คุณต้องการ


10
เหตุใดสิ่งนี้จึงถูกโหวตลงบนโลก โหวตกลับ! นี่เป็นวิธีที่ง่ายที่สุดและทำได้จาก C #
Paul Batum

54
+1: บางคนไม่ชอบอ้างถึงเนมสเปซ Microsoft.VisualBasic จาก C # แม้ว่าจะเป็นเพียงแอสเซมบลีอื่นที่ติดตั้งเป็นส่วนหนึ่งของทุกอย่างก็ตาม
Bevan

2
ส่งคืนค่าขยะติดลบบน Windows7 64 บิตพร้อมแรม 8GB นั่นคือเหตุผลที่คุณโหวตลง?
Piotr Kula

6
สำหรับใครก็ตามที่ใช้ (ComputerInfo ใหม่ ()) TotalPhysicalMemory มันทำงานได้ดีบนระบบที่มีหน่วยความจำมากกว่านั้น ประเภทผลตอบแทนไม่ได้ลงนามแบบยาวดังนั้นจำนวนลบจึงเป็นไปไม่ได้หากไม่มีการร่าย (ไม่ถูกต้อง)
Miles Strombach

6
var totalGBRam = Convert ToInt32 ((ComputerInfo ใหม่ () TotalPhysicalMemory / (Math.Pow (1024, 3))) + 0.5);
ฌอน

63

เพิ่มการอ้างอิงถึง Microsoft.VisualBasic.dll ตามที่มีคนกล่าวถึงข้างต้น จากนั้นการรับหน่วยความจำกายภาพทั้งหมดก็ทำได้ง่ายเพียงนี้ (ใช่ฉันทดสอบแล้ว):

static ulong GetTotalMemoryInBytes()
{
    return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
}

4
@ppumkin ใน. NET เวอร์ชันใดและ Visual Studio เวอร์ชันใด เมื่อฉันเรียกใช้ใน VS 2012 โดยใช้. NET 4.5 บนเครื่อง 64 บิตพร้อม RAM 8 GB มันก็ทำงานได้ดี ฉันได้รับคืน 8520327168
Ryan Lundy

.NET 4, VS2010 32bit บน Windows Pro 7 64bit
Piotr Kula

2
ใช้งานได้ดีบน x64 คุณกำลังใช้ VS 32 บิตซึ่งอาจรวบรวมไบนารี 32 บิตซึ่งจะไม่เห็นขนาดหน่วยความจำเต็ม
Lucas Teske

2
เมื่อใช้สิ่งนี้ใน Visual Studio 2017 กับ C # .Net 4.6.1 ฉันต้องเพิ่มการอ้างอิงสำหรับ Microsoft.VisualBasic เพื่อให้สิ่งนี้ใช้งานได้ โครงการ> เพิ่มข้อมูลอ้างอิง >> แอสเซมบลี> ตรวจสอบ Microsoft.VisualBasic >> OK
WebLuke

ฉันสังเกตเห็นความแตกต่างระหว่าง GetPhysicallyInstalledSystemMemory และ Microsoft.VisualBasic.Devices.ComputerInfo () TotalPhysicalMemory new FileSizeStruct (34173231104) {31.8 GB} ByteCount: 34173231104 ByteSize: GB Size: 31.8 new FileSizeStruct (34359738) ByteCount: 34359738 GB GB Size: 32
fanuc_bob

36

คำตอบทั้งหมดที่นี่รวมถึงคำตอบที่ยอมรับจะให้จำนวน RAM ทั้งหมดที่พร้อมใช้งาน และนั่นอาจเป็นสิ่งที่ OP ต้องการ

แต่ถ้าคุณสนใจที่จะรับจำนวนRAM ที่ติดตั้งคุณจะต้องโทรไปที่ฟังก์ชันGetPhysicallyInstalledSystemMemory

จากลิงค์ในส่วนหมายเหตุ:

GetPhysicallyInstalledSystemMemoryฟังก์ชั่นดึงปริมาณของ RAM ที่ติดตั้งทางร่างกายจากคอมพิวเตอร์ของ SMBIOS ตารางเฟิร์ม ซึ่งอาจแตกต่างจากจำนวนที่รายงานโดยฟังก์ชันGlobalMemoryStatusExซึ่งตั้งค่าสมาชิก ullTotalPhys ของโครงสร้าง MEMORYSTATUSEX เป็นจำนวนหน่วยความจำฟิสิคัลที่พร้อมใช้งานสำหรับระบบปฏิบัติการที่จะใช้ จำนวนหน่วยความจำที่พร้อมใช้งานสำหรับระบบปฏิบัติการอาจน้อยกว่าจำนวนหน่วยความจำที่ติดตั้งในคอมพิวเตอร์เนื่องจาก BIOS และไดรเวอร์บางตัวอาจสงวนหน่วยความจำไว้เป็นพื้นที่ I / O สำหรับอุปกรณ์ที่แมปหน่วยความจำทำให้หน่วยความจำไม่พร้อมใช้งานสำหรับระบบปฏิบัติการ และแอพพลิเคชั่น

โค้ดตัวอย่าง:

[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetPhysicallyInstalledSystemMemory(out long TotalMemoryInKilobytes);

static void Main()
{
    long memKb;
    GetPhysicallyInstalledSystemMemory(out memKb);
    Console.WriteLine((memKb / 1024 / 1024) + " GB of RAM installed.");
}

1
ขอขอบคุณ! ฉันกำลังมองหาสิ่งนี้ แต่ทุกที่ฉันสามารถดูวิธีค้นหาหน่วยความจำทั้งหมดที่มีอยู่แทนที่จะเป็นหน่วยความจำที่ติดตั้ง
SM

มันทำงานได้ไม่ดีบนเครื่องเสมือนของฉันแม้ว่าจะทำงานได้อย่างสมบูรณ์บนเครื่องหลักก็ตาม
SM

31

หากคุณใช้ Mono คุณอาจสนใจที่จะรู้ว่า Mono 2.8 (จะเปิดตัวในปลายปีนี้) จะมีตัวนับประสิทธิภาพที่รายงานขนาดหน่วยความจำจริงบนแพลตฟอร์มทั้งหมดที่ Mono ทำงานบน (รวมถึง Windows) คุณจะดึงค่าของตัวนับโดยใช้ข้อมูลโค้ดนี้:

using System;
using System.Diagnostics;

class app
{
   static void Main ()
   {
       var pc = new PerformanceCounter ("Mono Memory", "Total Physical Memory");
       Console.WriteLine ("Physical RAM (bytes): {0}", pc.RawValue);
   }
}

หากคุณมีความสนใจในรหัส C ซึ่งให้นับประสิทธิภาพการทำงานก็สามารถพบได้ที่นี่


ทำงานได้ดีบนระบบ linux ใด ๆ แม้ในระบบ ARM
harry4516

@ harry4516 บนระบบ Ubuntu ของฉันไม่รองรับ PerformanceCounter
Carlos Liu

14

อีกวิธีหนึ่งในการทำเช่นนี้คือการใช้. NET System.Management querying facilities:

string Query = "SELECT Capacity FROM Win32_PhysicalMemory";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(Query);

UInt64 Capacity = 0;
foreach (ManagementObject WniPART in searcher.Get())
{
    Capacity += Convert.ToUInt64(WniPART.Properties["Capacity"].Value);
}

return Capacity;

นี่เป็นการขว้าง System.Management.ManagementException ออกจากหน่วยความจำบนเครื่องของฉัน ความคิดใด ๆ ?
Amar

2
ฉันชอบอันนี้ Microsoft.VisualBasic.Devicesไม่จำเป็นต้องอ้างอิง และเป็นซับvar Capacity = new ManagementObjectSearcher("SELECT Capacity FROM Win32_PhysicalMemory").Get().Cast<ManagementObject>().Sum(x => Convert.ToInt64(x.Properties["Capacity"].Value));
VDWWD

10

สำหรับผู้ที่ใช้.net Core 3.0ไม่จำเป็นต้องใช้PInvokeแพลตฟอร์มเพื่อให้ได้หน่วยความจำกายภาพที่มีอยู่ GCระดับได้เพิ่มวิธีการใหม่GC.GetGCMemoryInfoที่ส่งกลับGCMemoryInfo Structพร้อมกับTotalAvailableMemoryBytesเป็นสถานที่ให้บริการ คุณสมบัตินี้ส่งคืนหน่วยความจำที่มีอยู่ทั้งหมดสำหรับตัวรวบรวมขยะ (ค่าเดียวกับ MEMORYSTATUSEX)

var gcMemoryInfo = GC.GetGCMemoryInfo();
installedMemory = gcMemoryInfo.TotalAvailableMemoryBytes;
// it will give the size of memory in MB
var physicalMemory = (double) installedMemory / 1048576.0;

คำตอบที่ฉันชอบ ขอบคุณ.
Matas Vaitkevicius

7

คุณสามารถใช้รหัสนี้เพื่อรับข้อมูลเหล่านั้นเพียงแค่เพิ่มข้อมูลอ้างอิง

using Microsoft.VisualBasic.Devices;

และใช้รหัสต่อไปนี้

    private void button1_Click(object sender, EventArgs e)
    {
        getAvailableRAM();
    }

    public void getAvailableRAM()
    {
        ComputerInfo CI = new ComputerInfo();
        ulong mem = ulong.Parse(CI.TotalPhysicalMemory.ToString());
        richTextBox1.Text = (mem / (1024*1024) + " MB").ToString();
    }

ไม่พบในเวอร์ชัน. net 4.6 ฉันหมายความว่าให้ไม่พบเนมสเปซ ComputerInfo ยิ่งกว่านั้น ... ไม่มี 'อุปกรณ์' เนมสเปซ
gumuruh

5
// use `/ 1048576` to get ram in MB
// and `/ (1048576 * 1024)` or `/ 1048576 / 1024` to get ram in GB
private static String getRAMsize()
{
    ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
    ManagementObjectCollection moc = mc.GetInstances();
    foreach (ManagementObject item in moc)
    {
       return Convert.ToString(Math.Round(Convert.ToDouble(item.Properties["TotalPhysicalMemory"].Value) / 1048576, 0)) + " MB";
    }

    return "RAMsize";
}

5

คุณสามารถใช้ WMI พบข้อมูลโค้ด

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _ 
& strComputer & "\root\cimv2") 
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")

For Each objComputer in colComputer 
  strMemory = objComputer.TotalPhysicalMemory
Next

โปรดทราบว่าSetไม่จำเป็นสำหรับ VB.NET อีกต่อไปรหัส VB6 นี้หรือไม่
jrh

2

ฟังก์ชันนี้ ( ManagementQuery) ทำงานบน Windows XP และใหม่กว่า:

private static string ManagementQuery(string query, string parameter, string scope = null) {
    string result = string.Empty;
    var searcher = string.IsNullOrEmpty(scope) ? new ManagementObjectSearcher(query) : new ManagementObjectSearcher(scope, query);
    foreach (var os in searcher.Get()) {
        try {
            result = os[parameter].ToString();
        }
        catch {
            //ignore
        }

        if (!string.IsNullOrEmpty(result)) {
            break;
        }
    }

    return result;
}

การใช้งาน:

Console.WriteLine(BytesToMb(Convert.ToInt64(ManagementQuery("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem", "TotalPhysicalMemory", "root\\CIMV2"))));

2
ว่าสถานที่ที่ไม่BytesToMbฟังก์ชั่นมาจากไหน?
Cee McSharpface

@dlatikay เป็นฟังก์ชันภายใน: BytesToMb คู่แบบคงที่ส่วนตัว (ไบต์ยาว) {return Math.Round (bytes / 1024d / 1024d, 2); }
Lance

1

เข้ากันได้กับ. Net และ Mono (ทดสอบด้วย Win10 / FreeBSD / CentOS)

การใช้ComputerInfoซอร์สโค้ดและPerformanceCounters สำหรับ Mono และเป็นข้อมูลสำรองสำหรับ. Net:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;

public class SystemMemoryInfo
{
    private readonly PerformanceCounter _monoAvailableMemoryCounter;
    private readonly PerformanceCounter _monoTotalMemoryCounter;
    private readonly PerformanceCounter _netAvailableMemoryCounter;

    private ulong _availablePhysicalMemory;
    private ulong _totalPhysicalMemory;

    public SystemMemoryInfo()
    {
        try
        {
            if (PerformanceCounterCategory.Exists("Mono Memory"))
            {
                _monoAvailableMemoryCounter = new PerformanceCounter("Mono Memory", "Available Physical Memory");
                _monoTotalMemoryCounter = new PerformanceCounter("Mono Memory", "Total Physical Memory");
            }
            else if (PerformanceCounterCategory.Exists("Memory"))
            {
                _netAvailableMemoryCounter = new PerformanceCounter("Memory", "Available Bytes");
            }
        }
        catch
        {
            // ignored
        }
    }

    public ulong AvailablePhysicalMemory
    {
        [SecurityCritical]
        get
        {
            Refresh();

            return _availablePhysicalMemory;
        }
    }

    public ulong TotalPhysicalMemory
    {
        [SecurityCritical]
        get
        {
            Refresh();

            return _totalPhysicalMemory;
        }
    }

    [SecurityCritical]
    [DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern void GlobalMemoryStatus(ref MEMORYSTATUS lpBuffer);

    [SecurityCritical]
    [DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);

    [SecurityCritical]
    private void Refresh()
    {
        try
        {
            if (_monoTotalMemoryCounter != null && _monoAvailableMemoryCounter != null)
            {
                _totalPhysicalMemory = (ulong) _monoTotalMemoryCounter.NextValue();
                _availablePhysicalMemory = (ulong) _monoAvailableMemoryCounter.NextValue();
            }
            else if (Environment.OSVersion.Version.Major < 5)
            {
                var memoryStatus = MEMORYSTATUS.Init();
                GlobalMemoryStatus(ref memoryStatus);

                if (memoryStatus.dwTotalPhys > 0)
                {
                    _availablePhysicalMemory = memoryStatus.dwAvailPhys;
                    _totalPhysicalMemory = memoryStatus.dwTotalPhys;
                }
                else if (_netAvailableMemoryCounter != null)
                {
                    _availablePhysicalMemory = (ulong) _netAvailableMemoryCounter.NextValue();
                }
            }
            else
            {
                var memoryStatusEx = MEMORYSTATUSEX.Init();

                if (GlobalMemoryStatusEx(ref memoryStatusEx))
                {
                    _availablePhysicalMemory = memoryStatusEx.ullAvailPhys;
                    _totalPhysicalMemory = memoryStatusEx.ullTotalPhys;
                }
                else if (_netAvailableMemoryCounter != null)
                {
                    _availablePhysicalMemory = (ulong) _netAvailableMemoryCounter.NextValue();
                }
            }
        }
        catch
        {
            // ignored
        }
    }

    private struct MEMORYSTATUS
    {
        private uint dwLength;
        internal uint dwMemoryLoad;
        internal uint dwTotalPhys;
        internal uint dwAvailPhys;
        internal uint dwTotalPageFile;
        internal uint dwAvailPageFile;
        internal uint dwTotalVirtual;
        internal uint dwAvailVirtual;

        public static MEMORYSTATUS Init()
        {
            return new MEMORYSTATUS
            {
                dwLength = checked((uint) Marshal.SizeOf(typeof(MEMORYSTATUS)))
            };
        }
    }

    private struct MEMORYSTATUSEX
    {
        private uint dwLength;
        internal uint dwMemoryLoad;
        internal ulong ullTotalPhys;
        internal ulong ullAvailPhys;
        internal ulong ullTotalPageFile;
        internal ulong ullAvailPageFile;
        internal ulong ullTotalVirtual;
        internal ulong ullAvailVirtual;
        internal ulong ullAvailExtendedVirtual;

        public static MEMORYSTATUSEX Init()
        {
            return new MEMORYSTATUSEX
            {
                dwLength = checked((uint) Marshal.SizeOf(typeof(MEMORYSTATUSEX)))
            };
        }
    }
}

0

ไม่มีใครได้กล่าวถึงGetPerformanceInfoเลย มีลายเซ็น PInvoke

ฟังก์ชันนี้ทำให้มีข้อมูลทั้งระบบต่อไปนี้:

  • CommitTotal
  • CommitLimit
  • CommitPeak
  • PhysicalTotal
  • มีจำหน่ายทางกายภาพ
  • SystemCache
  • KernelTotal
  • เคอร์เนล
  • เคอร์เนล
  • PageSize
  • HandleCount
  • ProcessCount
  • ThreadCount

PhysicalTotalคือสิ่งที่ OP กำลังมองหาแม้ว่าค่าจะเป็นจำนวนหน้าดังนั้นในการแปลงเป็นไบต์ให้คูณด้วยPageSizeค่าที่ส่งคืน


0

.NIT มีการ จำกัด จำนวนหน่วยความจำที่สามารถเข้าถึงได้ทั้งหมด คิดเป็นเปอร์เซ็นต์แล้ว 2 GB ใน xp คือเพดานแข็ง

คุณสามารถมี 4 GB อยู่ในนั้นและจะฆ่าแอปเมื่อถึง 2GB

นอกจากนี้ในโหมด 64 บิตยังมีหน่วยความจำจำนวนหนึ่งที่คุณสามารถใช้นอกระบบได้ดังนั้นฉันจึงไม่แน่ใจว่าคุณสามารถขอข้อมูลทั้งหมดได้หรือไม่หรือมีการป้องกันโดยเฉพาะ


/ ไม่ /. หน่วยความจำกายภาพทั้งหมดหมายถึงหน่วยความจำจริงที่ติดตั้งทางกายภาพ
Matthew Flaschen

จริงๆแล้ว DevelopingChris นั้นถูกต้อง หากคุณเรียกใช้ GlobalMemoryStatusEx บนเครื่อง XP ที่มี Ram 4 Gig ระบบจะรายงานว่ามีการติดตั้งเพียง 3 Gig เท่านั้น
epotter

นอกจากนี้การใช้ WMI เพื่อค้นหา TotalPhysicalMemory ใน Win32_ComputerSystem หรือ Win32_LogicalMemoryConfiguration ยังสร้างผลลัพธ์ที่ไม่ถูกต้อง
epotter

ขอบคุณไม่ใช่ว่าฉันไม่เข้าใจคำถามที่คุณต้องใช้แหล่งข้อมูลอื่นสำหรับข้อมูลอื่นที่ไม่ใช่ไลบรารี. net
DevelopingChris

คำตอบนี้เป็นคำตอบเดียวที่เข้าท่า ฉันเบื่อแล้วตอนนี้ใน Win 64 8Gb ram โดยใช้ VisualBasic อ้างอิง ฉันได้รับค่าลบขยะ
Piotr Kula

-3
/*The simplest way to get/display total physical memory in VB.net (Tested)

public sub get_total_physical_mem()

    dim total_physical_memory as integer

    total_physical_memory=CInt((My.Computer.Info.TotalPhysicalMemory) / (1024 * 1024))
    MsgBox("Total Physical Memory" + CInt((My.Computer.Info.TotalPhysicalMemory) / (1024 * 1024)).ToString + "Mb" )
end sub
*/


//The simplest way to get/display total physical memory in C# (converted Form http://www.developerfusion.com/tools/convert/vb-to-csharp)

public void get_total_physical_mem()
{
    int total_physical_memory = 0;

    total_physical_memory = Convert.ToInt32((My.Computer.Info.TotalPhysicalMemory) /  (1024 * 1024));
    Interaction.MsgBox("Total Physical Memory" + Convert.ToInt32((My.Computer.Info.TotalPhysicalMemory) / (1024 * 1024)).ToString() + "Mb");
}

6
นั่นอาจต้องขอบคุณตัวแปลง Visual Basic เป็น CShap แบบออนไลน์
Nick Binnet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.