Название процесса с самым высоким использованием CPU

Ваш код имеет вложенный фрагмент. Вызов super.onActivityForResult не работает

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

Вот одно из многих рабочих решений. создать фрагмент «на лету» и связать его непосредственно с активностью с помощью менеджера фрагментов поддержки. Затем вызовите startActivityForResult из вновь созданного фрагмента.

private void get_UserEmail() {

    if (view == null) {
        return;
    }
    ((TextView) view.findViewById(R.id.tvApplicationUserName))
            .setText("Searching device for user accounts...");

    final FragmentManager fragManager = getActivity().getSupportFragmentManager();

    Fragment f = new Fragment() {
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
                    new String[]{"com.google"}, false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode,
                                     Intent data) {
            if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
                String mEmail = "";
                if (resultCode == Activity.RESULT_OK) {
                    if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME)) {
                        mEmail = data
                                .getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                    }
                }
                if (mActivity != null) {
                    GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
                }
                doUser();
            }
            super.onActivityResult(requestCode, resultCode, data);
            fragManager.beginTransaction().remove(this).commit();
        }
    };
    FragmentTransaction fragmentTransaction = fragManager
            .beginTransaction();
    fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
    fragmentTransaction.commit();
}
5
задан Ry- 29 June 2013 в 02:33
поделиться

4 ответа

С PowerShell:

Get-Process | Sort-Object CPU -desc | Select-Object -first 3 | Format-Table CPU,ProcessName -hidetableheader

возвраты несколько как:

  16.8641632 System
   12.548072 csrss
  11.9892168 powershell
-3
ответ дан 14 December 2019 в 01:21
поделиться

Вы смогли использовать Pmon.exe для этого. Можно получить его как часть инструментов Windows Resource Kit (ссылка к версии Сервера 2003 года, которая может, по-видимому, использоваться в XP также).

1
ответ дан 14 December 2019 в 01:21
поделиться
1
ответ дан 14 December 2019 в 01:21
поделиться

Что Вы хотите получить, это - мгновенное использование ЦП (отчасти)...

На самом деле мгновенное использование ЦП для процесса не делает существует. Вместо этого необходимо сделать два измерения и вычислить среднее использование ЦП, формула довольно проста:

AvgCpuUsed = [TotalCPUTime (процесс, time2) - TotalCPUTime (процесс, time1)] / [time2-time1]

Чем ниже Time2 и различие Time1, тем более "мгновенно" Ваше измерение будет. Windows Task Manager вычисляет использование ЦП с интервалом одной секунды. Я нашел, что это более чем достаточно, и Вы могли бы даже рассмотреть выполнение его через 5 секунд, интервалы вызывают действие измерения себя, поднимает циклы ЦП...

Так, во-первых, для получения среднего процессорного времени

    using System.Diagnostics;

float GetAverageCPULoad(int procID, DateTme from, DateTime, to)
{
  // For the current process
  //Process proc = Process.GetCurrentProcess();
  // Or for any other process given its id
  Process proc = Process.GetProcessById(procID);
  System.TimeSpan lifeInterval = (to - from);
  // Get the CPU use
  float CPULoad = (proc.TotalProcessorTime.TotalMilliseconds / lifeInterval.TotalMilliseconds) * 100;
  // You need to take the number of present cores into account
  return CPULoad / System.Environment.ProcessorCount;
}

теперь, для "мгновенной" загрузки ЦП Вам будет нужен специализированный класс:

 class ProcLoad
{
  // Last time you checked for a process
  public Dictionary<int, DateTime> lastCheckedDict = new Dictionary<int, DateTime>();

  public float GetCPULoad(int procID)
  {
    if (lastCheckedDict.ContainsKey(procID))
    {
      DateTime last = lastCheckedDict[procID];
      lastCheckedDict[procID] = DateTime.Now;
      return GetAverageCPULoad(procID, last, lastCheckedDict[procID]);
    }
    else
    {
      lastCheckedDict.Add(procID, DateTime.Now);
      return 0;
    }
  }
}

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

6
ответ дан 14 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

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