Показать полную графическую версию : [решено] Медленно работает скрипт
svoboda1984
04-12-2015, 22:21
Существует такой скрипт на ps:
Get-WmiObject -Class Win32_Processor | ForEach-Object -Process {
"ЦПУ: {0}" -f $_.Name
}
Get-WmiObject -Class Win32_Processor | ForEach-Object -Process {
" ({0})" -f $_.Description
}
Get-WmiObject -Class Win32_Processor | ForEach-Object -Process {
" {0} Ядра Кэш 2: {1} Kb Кэш 3: {2} Kb " -f $_.NumberOfCores , $_.L2CacheSize , $_.L3CacheSize
}
Он показывает информацию в удобном для меня виде. Но работает очень медленно, секунды 3. Это только часть общего скрипта, где-то 1/10 часть. Остальной кусок выводит информацию за 1 секунду подобным методом. Если кто знает, объясните, в чём проблема. Почему именно эта часть работает так медленно, и как это исправить?
Делайте вывод в одном цикле ForEach-Object.
svoboda1984
04-12-2015, 23:59
Iska, Это не ответ. Например вот этот код:
Get-WmiObject -Class Win32_PhysicalMemory | ForEach-Object -Process {
"{0} {1} {2} {3} MHz Размер: {4:n} Gb" -f $_.BankLabel, $_.DeviceLocator, $_.PartNumber, $_.Speed, $($_.Capacity / 1Gb)
}
Get-WmiObject -Class Win32_PhysicalMemoryArray | ForEach-Object -Process {
" Количeство слотов: {0}" -f $_.MemoryDevices
}
Get-WmiObject -Class Win32_PhysicalMemoryArray | ForEach-Object -Process {
" Максимальный размер памяти: {0} Gb" -f $($_.MaxCapacity / 1Mb)
}
Отрабатывает за полсекунды. Тормоза именно в Win32_Processor. Может кто сталкивался с такой проблемой? У меня даже идей нет, почему он тормозит при обработке инфы процессора. Либо посоветуйте альтернативный вывод, чтоб его можно было использовать в powershell без тормозов.
Т.к. запрашиваются все свойства, а для вычисления LoadPercentage требуется примерно 1 секунда и три вызовова, то и получается примерно 3 секунды и больше.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394373(v=vs.85).aspx
Load capacity of each processor, averaged to the last second. Processor loading refers to the total computing burden for each processor at one time. This property is inherited from CIM_Processor.
PS > measure-command {Get-WmiObject -Class Win32_Processor -Property LoadPercentage}
Days : 0
Hours : 0
Minutes : 0
Seconds : 1
Milliseconds : 75
Ticks : 10752407
TotalDays : 1,24449155092593E-05
TotalHours : 0,000298677972222222
TotalMinutes : 0,0179206783333333
TotalSeconds : 1,0752407
TotalMilliseconds : 1075,2407
PS > measure-command {Get-WmiObject -Class Win32_Processor -Property Name,Description ,NumberOfCores , L2CacheSize ,
L3CacheSize }
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 11
Ticks : 118357
TotalDays : 1,36987268518519E-07
TotalHours : 3,28769444444444E-06
TotalMinutes : 0,000197261666666667
TotalSeconds : 0,0118357
TotalMilliseconds : 11,8357
Get-WmiObject -Class Win32_Processor -Property Name,Description ,NumberOfCores , L2CacheSize ,L3CacheSize | ForEach-Object -Process {
"ЦПУ: {0}" -f $_.Name
"({0})" -f $_.Description
"{0} Ядра Кэш 2: {1} Kb Кэш 3: {2} Kb " -f $_.NumberOfCores , $_.L2CacheSize , $_.L3CacheSize
}
svoboda1984
05-12-2015, 01:56
Kazun, спасибо, всё быстро заработало. Просто я ещё не въехал в особенности PS. После bat реально путаюсь в определениях. А оказывается, всё весьма просто.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.