Я вычисляю использование ЦП на нескольких моих серверах. Но расчет очень, очень медленный.Расчет использования ЦП: улучшение кода
Вот мой код до сих пор:
While it <= 5
Dim myOptions As New ConnectionOptions
myOptions.Username = _myParameters("user")
myOptions.Password = _myParameters("password")
Dim myRoot As String = "\\" & _myParameters("server") & "\root\cimv2"
Dim myScope As New ManagementScope(myRoot, myOptions)
Dim myQuery As New ObjectQuery(String.Format("select * from Win32_Processor"))
Dim mySearcher As New ManagementObjectSearcher(myScope, myQuery)
Dim myCollection As ManagementObjectCollection = mySearcher.Get
For Each OS As ManagementObject In myCollection
values.Add(OS("LoadPercentage"))
Next
Threading.Thread.Sleep(100) //Set some time between two calculations
itCounter += 1
End While
код висит каждый раз, когда на
For Each OS As ManagementObject In myCollection
Приложение теряет около 2-3 секунд там. В случае одного CPU это не проблема. Но в нашем случае
Вычислить среднее значение, используя 5 считывает
2,5 сек * 5 = 12,5 сек
Мониторинг около 15 процессора
12,5 сек * 15 = 3мин
3 мин. Между двумя обновлениями слишком длинны.
Вопрос: Причина и решение этой задержки?
Примечание: Этот код уже работает в другом потоке.
Примечание2: Eventual C# код приветствуется, а также
Solution (Со многими, большое спасибо Джон Эгертон)
Для будущих зрителей это решение решить это для меня:
Dim logon As New DlaLogon // control used for impersonation
logon.impersonateValidUser(//Impersonate here using username + password)
Dim cpuPerformance As New PerformanceCounter()
cpuPerformance.MachineName = myParameters("server") //myServername
cpuPerformance.CategoryName = "Processor"
cpuPerformance.CounterName = "% Processor Time"
cpuPerformance.InstanceName = "_Total"
// Calculate average over 5 times
While it <= 5
//Add the result to List 'CpuReads'
//We will calculate the average based on that list
cpuReads.Add(cpuPerformance.NextValue())
Threading.Thread.Sleep(500) // sleep for 0.5 sec
it += 1
End While
it = 0
logon.undoImpersonation() // Undo impersonation
Я надеюсь, что это может быть полезно
Сладкая мать бога! Какая разница в производительности! Thnx человек! – User999999
. Framework .Net содержит огромное количество действительно полезных вещей. Проблема во многом заключается в том, что ваша проблема уже может быть решена с помощью фреймворка, а затем сможет его найти! –