У меня проблема с приложением C #.
Я использую WMI для получения информации о моем процессоре, графическом процессоре и оперативной памяти.
Все работает хорошо и быстро, кроме процессора (Win32_Processor
).
У меня есть меню и разные панели для каждого (CPU, RAM, GPU).
Сначала я пытался загрузить всю информацию с запуском приложения, он не работал совсем, потребовалось так много времени для загрузки.
Во-вторых, я попытался загрузить их, когда панель была видна (после нажатия кнопки), и это хорошо работало на панелях ram и gpu.
Я использовал один и тот же код для всех них. Вот оно:
Я пытаюсь сделать так, чтобы информация процессора загружалась настолько быстро, насколько это возможно, но из-за поиска и пробования моих собственных вещей я не могу этого добиться.
Я понимаю, что для того, чтобы собрать всю информацию, требуется некоторое время, просто странно, что для этого нужно столько времени!
PS: время загрузки, когда вы нажимаете кнопку для панели процессора, составляет 3,5 секунды, а когда вы нажимаете кнопку «спецификации», просто чтобы показать maxfreq, количество ядер, ширину данных, количество потоков, текущее напряжение, а также l2, l3 занимает 8 секунд.
private void getinfo(string hwclass, string syntax, string name)
{
ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
foreach (ManagementObject mo in mos.Get())
{
string valuebro = Convert.ToString(mo[syntax]);
if (name == "CPUNAME")
{
CPUNAME.Text = valuebro;
}
else if (name == "CPUMAXFREQ")
{
//CPUMAXFREQ.Text = "Clocked at " + valuebro + "Mhz";
maxfreqbro = Convert.ToInt32(valuebro);
}
else if (name == "CPUCURFREQ")
{
curfreqbro = Convert.ToInt32(valuebro);
CPUMAXFREQ.Text = "Frequency: " + valuebro + "Mhz";
}
else if (name == "ThreadC")
{
THREADC.Text ="Threads: " + valuebro;
}
else if (name == "DataW")
{
DataW.Text = "Data Width: " +valuebro + " bit";
}
else if (name == "L2Size")
{
l2size = Convert.ToInt32(valuebro) / 1000;
L2Size.Text = "L2 Size: " + l2size.ToString() + " MB";
}
else if (name == "L3Size")
{
l3size = Convert.ToInt32(valuebro) / 1000;
L3Size.Text ="L3 Size: "+ l3size.ToString() + " MB";
}
else if (name == "NOC")
{
NoOfCores.Text = "Cores: " + valuebro;
}
else if (name == "VOLT")
{
voltage = Convert.ToDecimal(valuebro) / 10;
output = voltage.ToString();
CurrentVolt.Text = "Core Voltage: " + output + " V";
}
else if (name == "CPUSTATUS")
{
CPUSTATUS.Text = "Status: " + valuebro;
}
else if (name == "AVAIL")
{
Avail.Text = "Code: " + valuebro;
}
}
}
(ОЗУ)
private void raminfo(string hwclass, string syntax, string name)
{
ManagementObjectSearcher ram = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
foreach (ManagementObject rm in ram.Get())
{
string valueram = Convert.ToString(rm[syntax]);
if (name == "OED")
{
OEDRAM.Text = "" + valueram;
}
else if (name == "ERRINFO")
{
ErrInfoRam.Text = "Error code: " + valueram;
}
else if (name == "ERRDESC")
{
ErrDescRAM.Text = "" + valueram;
}
else if (name == "CCVOLT")
{
volts = Convert.ToDecimal(valueram) / 1000;
finaloutput = volts.ToString();
voltageram.Text = "Voltage: " +finaloutput + " V";
}
else if (name == "CCSPEED")
{
Currentspeed.Text = "Current Frequency: " + valueram + " Mhz";
}
else if (name == "SPEED")
{
speedram.Text = "Max Frequency: " + valueram + " Mhz";
}
else if (name == "CAPA")
{
Int64 capa = Convert.ToInt64(valueram) / 1024;
Int64 final = capa / 1024;
capacityram.Text = "Total memory: " + final + " MB";
}
}
}
(GPU)
private void gpuinfo(string hwclass, string syntax, string name)
{
ManagementObjectSearcher gpu = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
foreach (ManagementObject gp in gpu.Get())
{
string valuegpu = Convert.ToString(gp[syntax]);
if (name == "GPUNAME")
{
NameGPU.Text = valuegpu;
}
else if (name == "Availability")
{
AvailGPU.Text = "Status code: " + valuegpu;
}
else if (name == "CONFMEC")
{
CMEC.Text = "Error code: " + valuegpu;
}
else if (name == "DVer")
{
DriverVers.Text = "Driver Version: " + valuegpu;
}
else if (name == "ERDESC")
{
ErrDescr.Text = valuegpu;
}
else if (name == "ERRCLR")
{
ErrorClear.Text = valuegpu;
}
else if (name == "STAT")
{
StatusGPU.Text = "Status: " + valuegpu;
}
}
}