Удаление категорий счетчиков производительности Windows

В вашем классе Led у вас есть controller в качестве поля, и вы не инициализируете его, а используете присваивание ему в теле конструктора Led, поэтому сначала его нужно создать по умолчанию. Решением может быть инициализация и создание копии:

Led::Led(int Pin, i2cController &Controller) :
    controller( Controller ),
    pin( Pin )
{
}

, тогда ваша проблема должна исчезнуть

24
задан Matt Howells 26 September 2008 в 15:15
поделиться

3 ответа

Насколько я знаю, нет никакого способа безопасно удалить их кроме программно (они предназначаются, чтобы приложения создали и удалили во время установки), но это тривиально, чтобы сделать от консоли командной строки PowerShell. Просто выполните эту команду:

[Diagnostics.PerformanceCounterCategory]::Delete( "Your Category Name" )

ОДНАКО: (РЕДАКТИРОВАНИЕ)

Можно удалить ключ реестра, это создается, и это заставит категорию исчезнуть.

Для категории под названием "Материально-технические ресурсы" можно удалить целый ключ в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inventory ... и хотя я не был бы готов держать пари, что очищает все, это заставит категорию исчезнуть. (При выполнении Монитора Процесса при выполнении Удаления () метод Вы видите, может большой другой случай действия и там, кажется, не другие внесенные изменения).

Важно отметить, что, поскольку я сказал первоначально: когда Вы получаете ту ошибку из Visual Studio, могло бы случиться так, что она уже удалена, и необходимо обновить представление в VS. В моем тестировании я должен был перезапустить приложения, чтобы заставить их на самом деле получать чистый список доступных категорий.

Можно проверить полный список категорий от PowerShell, чтобы видеть, перечислен ли он:

[Diagnostics.PerformanceCounterCategory]::GetCategories() | Format-Table -auto

Но если Вы проверите их, затем удалите ключ реестра, то... они все еще обнаружатся, пока Вы не перезапустите PowerShell (при запуске другого экземпляра можно выполнить тот же запрос туда, и он НЕ покажет удаленный объект, но повторно выполняющийся GetCategories в первом продолжит показывать его.

Между прочим, можно отфильтровать тот список, если Вы хотите к использованию - как для шаблонов, или - соответствуют для полных регулярных выражений:

[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -like "*network*" } | Format-Table -auto
[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -match "^SQL.*Stat.*" } | Format-Table -auto
41
ответ дан 28 November 2019 в 23:06
поделиться

Вы могли отключить его с помощью инструмента набора ресурса Microsoft - устанавливают его от

http://download.microsoft.com/download/win2000platform/exctrlst/1.00.0.1/nt5/en-us/exctrlst_setup.exe

или отключают его из реестра вручную (не попробовали), описанный здесь

http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/94214.mspx?mfr=true

0
ответ дан 28 November 2019 в 23:06
поделиться

Вы также можете использовать LinqPad, поскольку это не требует какой-либо установки - http://www.linqpad.net/ .

Запустите следующий код в виде «Операторов C #»:

System.Diagnostics.PerformanceCounterCategory.Delete («Имя категории для удаления»);

Я бы запустил его дважды, в первый раз, чтобы выполнить фактическое удаление, второй раз, чтобы получить сообщение об ошибке, подтверждающее успешное удаление.

10
ответ дан 28 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: