Можно генерировать сериализуемые классы C# из схемы (xsd) использование xsd.exe:
xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir
, Если схема имеет зависимости (включал/импортировал схемы), они должны все быть включены в ту же командную строку.
Есть несколько различных частей информации, относящихся к процессорам, которые вы можете получить:
Все они могут быть разными; в случае машины с 2 двухъядерными процессорами с поддержкой гиперпоточности, имеется 2 физических процессора, 4 ядра и 8 логических процессоров.
Количество логических процессоров доступно через класс Environment , но другая информация доступна только через WMI (и вам, возможно, придется установить некоторые исправления или службу packs , чтобы получить его в некоторых системах):
Не забудьте добавить в свой проект ссылку на System.Management.dll
Физические процессоры:
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
Console.WriteLine("Number Of Physical Processors: {0} ", item["NumberOfProcessors"]);
}
Ядра:
int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
coreCount += int.Parse(item["NumberOfCores"].ToString());
}
Console.WriteLine("Number Of Cores: {0}", coreCount);
Логические процессоры:
Console.WriteLine("Number Of Logical Processors: {0}", Environment.ProcessorCount);
ИЛИ
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
Console.WriteLine("Number Of Logical Processors: {0}", item["NumberOfLogicalProcessors"]);
}
Процессоры, исключенные из Windows:
Вы также можете использовать вызовы Windows API в setupapi.dll для обнаружения процессоров, которые были исключены из Windows (например, с помощью настроек загрузки) и не обнаруживаются с помощью вышеупомянутые средства. В приведенном ниже коде указано общее количество существующих логических процессоров (я не смог понять, как отличить физические процессоры от логических), включая те, которые были исключены из Windows:
static void Main(string[] args)
{
int deviceCount = 0;
IntPtr deviceList = IntPtr.Zero;
// GUID for processor classid
Guid processorGuid = new Guid("{50127dc3-0f36-415e-a6cc-4cb3be910b65}");
try
{
// get a list of all processor devices
deviceList = SetupDiGetClassDevs(ref processorGuid, "ACPI", IntPtr.Zero, (int)DIGCF.PRESENT);
// attempt to process each item in the list
for (int deviceNumber = 0; ; deviceNumber++)
{
SP_DEVINFO_DATA deviceInfo = new SP_DEVINFO_DATA();
deviceInfo.cbSize = Marshal.SizeOf(deviceInfo);
// attempt to read the device info from the list, if this fails, we're at the end of the list
if (!SetupDiEnumDeviceInfo(deviceList, deviceNumber, ref deviceInfo))
{
deviceCount = deviceNumber - 1;
break;
}
}
}
finally
{
if (deviceList != IntPtr.Zero) { SetupDiDestroyDeviceInfoList(deviceList); }
}
Console.WriteLine("Number of cores: {0}", deviceCount);
}
[DllImport("setupapi.dll", SetLastError = true)]
private static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid,
[MarshalAs(UnmanagedType.LPStr)]String enumerator,
IntPtr hwndParent,
Int32 Flags);
[DllImport("setupapi.dll", SetLastError = true)]
private static extern Int32 SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);
[DllImport("setupapi.dll", SetLastError = true)]
private static extern bool SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet,
Int32 MemberIndex,
ref SP_DEVINFO_DATA DeviceInterfaceData);
[StructLayout(LayoutKind.Sequential)]
private struct SP_DEVINFO_DATA
{
public int cbSize;
public Guid ClassGuid;
public uint DevInst;
public IntPtr Reserved;
}
private enum DIGCF
{
DEFAULT = 0x1,
PRESENT = 0x2,
ALLCLASSES = 0x4,
PROFILE = 0x8,
DEVICEINTERFACE = 0x10,
}
Environment.ProcessorCount должна дать вам количество ядер на локальном компьютере.