Я использую C#, .net 9.0, против 2022 и систему пакетов Nuget.management .
В основном при чтении и обработке информации оборудования, конечно, можно наткнуться на ПК с несколькими графическими процессорами. Через немного спины и четвертого с лидером проекта мне сказали, что я должен сохранить информацию только для одного графического процессора, поэтому, следовательно, наиболее актуально.public class WinVideoControllerInfo
{
#region Properties
public string Name { get; set; }
public uint AdapterRAM { get; set; }
public string AdapterDACType { get; set; }
public string VideoProcessor { get; set; }
#endregion
public WinVideoControllerInfo()
{
}
// this is for interface purposes don't mind it
public WinVideoControllerInfo Construct(ManagementBaseObject obj)
{
return new WinVideoControllerInfo(obj);
}
// I am aware of the problems with AdapterRAM I got a solution for that
public WinVideoControllerInfo(ManagementBaseObject obj)
{
// this basically just gets the Property Value of a MBO Property with "the same name"
Name = obj.GetPropVal(nameof(Name));
AdapterRAM = obj.GetPropVal(nameof(AdapterRAM));
AdapterDACType = obj.GetPropVal(nameof(AdapterDACType));
VideoProcessor = obj.GetPropVal(nameof(VideoProcessor));
}
}
< /code>
Важный код: < /p>
public static void RetrieveGPUInfo()
{
// Get GPUs (this will have a check if the List is empty)
List winInfos = ReadWinGPUS();
// Filter for the relevant GPU
WinVideoControllerInfo relevantGPU = FilterForRelevantGPU(winInfos);
// Process the data but I got that bit covered and it's not relevant for the question I think
// If you guys want this bit here feel free to tell me
// ...
}
public static List ReadWinGPUS()
{
List winInfos = new();
try
{
// all this does is give me the ManagementObjectCollection for Win32_VideoController
ManagementObjectCollection rawGraphicsInformation = GetSearcherResults(SearchAreas.Graphic);
// Iterate over the active GPUs (this automatically does not include any disabled GPUs)
foreach (ManagementBaseObject baseObject in rawGraphicsInformation)
{
WinVideoControllerInfo winInfo = new WinVideoControllerInfo(baseObject);
winInfos.Add(winInfo);
}
}
catch (Exception e)
{
// todo
}
// return all found GPUs
return winInfos;
}
public static WinVideoControllerInfo FilterForRelevantGPU(List winInfos)
{
WinVideoControllerInfo? relevantGPU = null;
WinVideoControllerInfo[] internalGPUs = winInfos.Where(w => w.AdapterDACType.Contains("Internal")).ToArray();
WinVideoControllerInfo[] nonInternalGPUs = winInfos.Except(internalGPUs).ToArray();
// this filter is very preliminary still
if (nonInternalGPUs.Any())
{
relevantGPU = nonInternalGPUs[0];
}
else
{
relevantGPU = internalGPUs[0];
}
return relevantGPU;
}
< /code>
Теперь, чтобы добраться до мяса вопроса: я начинаю сомневаться в том, разумно ли мои «основные» критерии «не быть внутренним DAC». Документация шаткая, но до сих пор я взял на себя, чтобы понять, что внутренний является показателем того, что это не выделенный графический процессор, а скорее графический процессор, встроенный в процессор. Но я могу ошибаться здесь. Я в основном хочу знать, правильно ли мое мышление, и если не то, что есть лучше, чтобы фильтровать для выделенного графического процессора, если он существует. И если существует несколько, как я мог бы определить его актуальность. Я хотел бы, чтобы я мог, но сейчас я не получаю его. Я знаю, что это довольно расплывчатая задача, но я немного разбивал свой мозг по этому поводу. В то время как моя текущая попытка OFC игнорирует, что может быть несколько выделенных графических процессоров. /> Dactype «внутренний» на самом деле означает то, что я предполагал, это означает? /> < /li>
< /ul>
Подробнее здесь: https://stackoverflow.com/questions/797 ... pu-of-a-pc