Почему счетчик производительности процессора продолжает сообщать об использовании процессора 0%?

Этот вопрос был моим любимым человеком в течение некоторого времени. Я опытный программист со многими языками под моим поясом. Один из моих любимых языков, которым я имел удовольствие использовать Python. Python поддерживает именованные параметры без каких-либо обманщиков .... Поскольку я начал использовать Python (некоторое время назад), все стало проще. Я считаю, что каждый язык должен поддерживать именованные параметры, но это не так.

Многие люди говорят, что просто используют трюк «Пропустить объект», чтобы вы назвали параметры.

/**
 * My Function
 *
 * @param {Object} arg1 Named arguments
 */
function myFunc(arg1) { }

myFunc({ param1 : 70, param2 : 175});

И это отлично работает, за исключением того, что ..... когда дело доходит до большинства IDE, многие из нас разработчики полагаются на подсказки типа / аргумента в нашей среде IDE. Я лично использую PHP Storm (наряду с другими IDE JetBrains, такими как PyCharm для python и AppCode для Objective C)

И самая большая проблема с использованием трюка «Передача объекта» заключается в том, что когда вы вызываете функцию, IDE дает вам однотипный намек и все ... Как мы должны знать, какие параметры и типы должны входить в объект arg1?

I have no idea what parameters should go in arg1 [/g0]

Итак ... трюк «Пропустить объект» не работает для меня ... Это на самом деле вызывает больше головных болей, когда приходится смотреть на док-блок каждой функции, прежде чем я узнаю, какие параметры ожидает функция. Конечно, это отлично подходит, когда вы поддерживаете существующий код, но это ужасно для написания нового кода.

Ну, это тот метод, который я использую ... Теперь могут быть некоторые проблемы с ним, и некоторые разработчики могут скажите мне, что я делаю это неправильно, и у меня есть открытый ум, когда дело доходит до этих вещей ... Я всегда готов смотреть на лучшие способы решения задачи ... Итак, если есть проблема с этой техникой , то комментарии приветствуются.

/**
 * My Function
 *
 * @param {string} arg1 Argument 1
 * @param {string} arg2 Argument 2
 */
function myFunc(arg1, arg2) { }

var arg1, arg2;
myFunc(arg1='Param1', arg2='Param2');

Таким образом, у меня есть лучшее из обоих миров ... новый код легко писать, так как моя IDE дает мне все правильные подсказки аргументов ... И, пока поддерживая код позже, я могу сразу увидеть не только значение, переданное функции, но и имя аргумента. Единственный недостаток, который я вижу, - объявлять ваши имена аргументов как локальные переменные, чтобы не загрязнять глобальное пространство имен. Конечно, это немного лишний набор, но тривиальный по сравнению с временем, требуемым для поиска докблоков при написании нового кода или сохранении существующего кода.

Now, I have all the parameters and types when creating new code [/g1]

30
задан Breeze 20 December 2017 в 07:11
поделиться

1 ответ

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

-121--3740476-

Механизм classloader на Java является мощным, поскольку предоставляет абстракционную точку именно в той точке, где загружен код, что позволяет выполнять такие действия, как:

  • поиск битов класса в другом месте, кроме пути к классам (db, удаленный url, файловая система и т.д.)
  • загрузка исходного кода, который вы только что создали и скомпилировали самостоятельно (с помощью javac api)
  • загрузка байтового кода, который вы только что создали самостоятельно (скажем, с ASM)
  • загрузка кода и ИЗМЕНЕНИЕ его перед использованием (с ASM, Java-агентами и т.д.)
  • RE-код загрузки на лету
  • цепные погрузчики вместе в деревьях (обычное делегирование) или веб-страницы (стиль OSGi на основе родственных узлов) или все, что вы хотите

На точке изменения кода во время загрузки, есть мир интересных вещей, которые вы можете сделать, чтобы переделать ваш код - AOP, профилирование, трассировка, изменения поведения и т.д. В Terracotta мы полагались на абстракцию classloader, чтобы динамически загрузить класс, затем перехватить весь доступ к полям и динамически добавить возможность загрузки состояния из того же объекта на удаленном узле в кластере позже. Классные вещи.

-121--1732673-

Первая итерация счетчика всегда будет равна 0, так как ей нечего сравнивать с последним значением. Попробуйте это:

var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");

Тогда вы должны увидеть некоторые данные выходят. Это сделано, чтобы быть увиденным в постоянном графике или обновленном сценарии... вот почему вы не сталкиваетесь с этой проблемой часто.

Вот ссылка MSDN :

Метод nextValue () всегда возвращает значение 0 для первого вызова. Так что вы необходимо вызвать этот метод в секунду время.

42
ответ дан 27 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

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