사용자의 RAM 용량에 대한 정보를 기록해야합니다. 내 첫 번째 접근 방식은 GlobalMemoryStatusEx를 사용하는 것이지만, 얼마나 많은 메모리가 윈도우에 제공되는지, 얼마만큼 설치되었는지는 알 수 없다. 이 함수는 GetPhysicallyInstalledSystemMemory가 있지만 Vista 만 지원합니다. XP에서 작동하려면이 기능이 필요합니다. GetPhysicallyInstalledSystemMemory가 사용하고있는 SMBIOS 정보를 쿼리하는 간단한 방법이 있습니까? 아니면이 값을 찾을 수있는 레지스트리 값이 있습니까?Windows에 실제로 얼마나 많은 메모리가 설치되어 있는지 어떻게 알 수 있습니까?
답변
편집 : 나는 steelbytes '대답을 사용하려고하지만 어떤 이유로 WMI를 사용할 수없는 경우, 당신은이 작업을 수행 할 수 있습니다 :
Vista 이전의 Windows 버전이이 정보를 추적한다고 생각지 않습니다. Vista 이전의 진정한 가치를 찾으려면 시스템 특정 BIOS 또는 마더 보드 열거를해야합니다. 가장 좋은 방법은 새로운 API 인 GetPhysicallyInstalledSystemMemory
을 호출하고 XP 시스템의 경우 GlobalMemoryStatusEx
으로 페일 오버하는 것입니다.
GlobalMemoryStatusEx에 의해 반환되는 값 중 하나는 찾고있는 것처럼 보이는 ullTotalPhys입니다.
비디오 메모리에 사용되는 RAM과 같은 것은 없지만, 그럴 가능성은 전혀 없습니다. 내가 WMI 당신에게이 정보를 제공 할 수 있습니다 생각
우 ~ 이걸 생각해 봤으면 좋겠어. +1. –
나는 그것이 XP인지 아닌지 확실하지 않거나 그렇지 않다 ... 그냥 아이디어로 게시 할 것이라고 생각했다 :-) – SteelBytes
입니다. XP 컴퓨터에서 작동해야합니다. –
Win32_ComputerSystem 클래스 (WMI)와 TotalPhysicalMemory 속성을 살펴 봐야합니다. 관리되는 코드의 System.Management 네임 스페이스를 통해 .Net을 통해이 정보에 액세스하는 방법이 있습니다 (C#을 사용하므로 Visual Studio를 사용하여 직접 C++ 개발을 시도하지 않았습니다). WMI를 직접 실행하고 C++ 프로그램에서 스크립트를 호출하도록 스크립트를 만들 수도 있습니다.
업데이트 : Win32_PhysicalMemory 클래스를 볼 수도 있습니다 (Capacity 속성을 확인하십시오). 이것은 등 RAM의 일부를 사용 때문에 BIOS에 부정확 한 측정 값을 완화합니다
업데이트 2 : 나는 C#을 (3.5) 및 Windows XP (SP 2) 작동이 시도했습니다
. C++에서 (적어도 Visual Studio를 통해) 동일한 WMI 클래스와 비슷한 것을 할 수있을 것이라고 확신합니다. 문제가 없으므로 Vista 나 그 이상의 문제는 아닙니다. 이것이 정확하게 당신이 찾고있는 것인지 모르겠지만,이 코드는 시스템의 총 실제 메모리 용량을 반환합니다 (얼마나 많은 양은 무료가 아닙니다). 바라기를 이것은 당신이 의미 한 것입니다. 어쨌든 여기에 몇 가지 샘플 RAM의 각 스틱을 찾아서 (용량 포함) 각각에 대한 몇 가지 정보를 표시 코드는 다음 하단에있는 총 :
private void btnRam_Click(object sender, EventArgs e)
{
RamCounter rc = new RamCounter();
rc.GetRamSticks();
MessageBox.Show(rc.ToString());
}
:
using System;
using System.Collections.Generic;
using System.Management;
using System.Text;
namespace WmiTest
{
public class RamCounter
{
private List<RamStick> _ramSticks;
private int _totalRam;
private StringBuilder _stringRepresentation;
public RamCounter()
{
_ramSticks = new List<RamStick>();
_totalRam = 0;
_stringRepresentation = new StringBuilder();
}
public void GetRamSticks()
{
_ramSticks.Clear();
_totalRam = 0;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject mo in queryCollection)
{
_ramSticks.Add(
new RamStick(Convert.ToUInt64(mo.GetPropertyValue("Capacity")),
mo.GetPropertyValue("DeviceLocator").ToString(),
mo.GetPropertyValue("Description").ToString(),
Convert.ToUInt32(mo.GetPropertyValue("FormFactor")),
Convert.ToUInt32(mo.GetPropertyValue("Speed"))));
}
}
public override string ToString()
{
_stringRepresentation.Capacity = 0;
foreach (RamStick rs in _ramSticks)
{
_stringRepresentation.Append(rs.ToString());
_totalRam += rs.CapacityInMB;
}
_stringRepresentation.Append("Total RAM(MB): " + _totalRam);
return _stringRepresentation.ToString();
}
}
public class RamStick
{
private UInt64 _capacity;
private UInt32 _formFactor;
public RamStick(UInt64 capacity, string location, string description, UInt32 formFactor, UInt32 speed)
{
_capacity = capacity;
Location = location;
Description = description;
_formFactor = formFactor;
Speed = speed;
}
public int CapacityInMB
{
get { return Convert.ToInt32(_capacity/(1024 * 1024)); }
}
public string Location
{
get;
private set;
}
public string Description
{
get;
private set;
}
public string GetFormFactor()
{
string formFactor = string.Empty;
switch (_formFactor)
{
case 1:
formFactor = "Other";
break;
case 2:
formFactor = "SIP";
break;
case 3:
formFactor = "DIP";
break;
case 4:
formFactor = "ZIP";
break;
case 5:
formFactor = "SOJ";
break;
case 6:
formFactor = "Proprietary";
break;
case 7:
formFactor = "SIMM";
break;
case 8:
formFactor = "DIMM";
break;
case 9:
formFactor = "TSOP";
break;
case 10:
formFactor = "PGA";
break;
case 11:
formFactor = "RIMM";
break;
case 12:
formFactor = "SODIMM";
break;
case 13:
formFactor = "SRIMM";
break;
case 14:
formFactor = "SMD";
break;
case 15:
formFactor = "SSMP";
break;
case 16:
formFactor = "QFP";
break;
case 17:
formFactor = "TQFP";
break;
case 18:
formFactor = "SOIC";
break;
case 19:
formFactor = "LCC";
break;
case 20:
formFactor = "PLCC";
break;
case 21:
formFactor = "BGA";
break;
case 22:
formFactor = "FPBGA";
break;
case 23:
formFactor = "LGA";
break;
default:
formFactor = "Unknown";
break;
}
return formFactor;
}
public UInt32 Speed
{
get;
private set;
}
public override string ToString()
{
return string.Format("Description:{1}{0}"
+ "Location:{2}{0}"
+ "Form Factor:{3}{0}"
+ "Speed:{4}{0}"
+ "Capacity(MB):{5}{0}{0}",
Environment.NewLine,
Description,
Location,
GetFormFactor(),
Speed,
CapacityInMB);
}
}
}
코드를 사용하려면 내 컴퓨터의 샘플 출력 :
Description: Physical Memory
Location: J6H1
Format Factor: DIMM
Speed: 667
Capacity(MB): 1024
Description: Physical Memory
Location: J6H2
Format Factor: DIMM
Speed: 667
Capacity(MB): 1024
Description: Physical Memory
Location: J6J1
Format Factor: DIMM
Speed: 667
Capacity(MB): 1024
Total RAM(MB): 3072
이것은'GlobalMemoryStatusEx' 호출과 같은 문제가 있습니다. –
많은 등록 정보는 특정 Windows 버전 (또는 특정 버전 이전)에서 지원되지 않는지 여부를 나타냅니다.언급 한 속성 중 어느 것도 Vista 이상인 것은 아닙니다. 그것은 그들이 XP에서 지원된다고 말하는 것이 아닙니다. (나 자신을 시도하지 않았습니다). –
Win32_ComputerSystem 내부의 호출이 단순히 GlobalMemoryStatusEx 호출로 바뀐 것으로 의심됩니다. 그러나 Win32_PhysicalMemory 열거 형은 모든 시스템에서 작동해야합니다. +1 업데이트. –
- 1. .NET 3.5 SP1이 설치되어 있는지 어떻게 알 수 있습니까?
- 2. Windows Installer가 설치되어 있는지 어떻게 알 수 있습니까?
- 3. Windows Mobile : GPS가 설치되어 있는지 어떻게 알 수 있습니까?
- 4. Mac에 어떤 Python 라이브러리가 설치되어 있는지 어떻게 알 수 있습니까?
- 5. XenApp Client가 사용자 컴퓨터에 설치되어 있는지 어떻게 알 수 있습니까?
- 6. Jira에 GreenHopper가 설치되어 있는지 어떻게 알 수 있습니까?
- 7. IIS가 실제로 내 HTML을 압축하고 있는지 어떻게 알 수 있습니까?
- 8. 이메일이 실제로 전송되는지 어떻게 알 수 있습니까?
- 9. Java에서 누수가 있는지 어떻게 알 수 있습니까?
- 10. 실제로 얼마나 많은 인덱스가 사용됩니까?
- 11. 델파이 앱에서 현재 얼마나 많은 스택 공간이 사용되고 있는지 어떻게 알 수 있습니까?
- 12. TextBox의 나머지 공간에 얼마나 많은 문자가 들어 있는지 어떻게 알 수 있습니까?
- 13. 얼마나 많은 응용 프로그램 세션 데이터를 실제로 저장할 수 있습니까?
- 14. Dispatcher.DisableProcessing이 활성화되어 있는지 어떻게 알 수 있습니까?
- 15. Malloc -> 얼마나 많은 메모리가 할당 되었습니까?
- 16. ALTER TABLE 명령에 얼마나 오래있을 수 있는지 알 수 있습니까?
- 17. DataOutput.writeUTF를 통해 얼마나 많은 바이트가 쓰여 졌는지 알 수 있습니까?
- 18. 디렉토리에서 OSX에서 얼마나 많은 하드 링크가 있는지 말할 수 있습니까?
- 19. Python이 java에서 Windows에 설치되어 있는지 확인하는 방법은 무엇입니까?
- 20. 얼마나 많은 메모리가 GC를 기다리고 있는지 성능 모니터에서 어느 카운터를 사용할 수 있습니까?
- 21. 얼마나 많은 사용자가 "좋아"하는 것을 알 수 있습니까? [facebook]
- 22. PHP에서 오늘 얼마나 많은 월요일이 지나간 지 알 수 있습니까?
- 23. 컴퓨터가 얼마나 많은 인수를 따르는 지 알 수 있습니까?
- 24. 드라이브에 플로피가 있는지 어떻게 알 수 있습니까?
- 25. 개체가 비어 있는지 어떻게 알 수 있습니까?
- 26. 요소가 목록에 있는지 어떻게 알 수 있습니까?
- 27. 파이썬에 자식이 있는지 어떻게 알 수 있습니까?
- 28. QLineEdit에 포커스가 있는지 어떻게 알 수 있습니까?
- 29. 오픈 릴레이가 있는지 어떻게 알 수 있습니까?
- 30. 컨트롤이 시각화되고 있는지 어떻게 알 수 있습니까?
왜이 답변을 upvoted입니까? 질문을 다른 말로 간단히 말합니다. –