CPP, как ускорить код?  
Автор Сообщение

0
Сообщение CPP, как ускорить код?
Я недавно начал изучать C++, поэтому решил попробовать написать программку которая будет перебирать PID'ы и выдавать названия ассоциирующихся с ними процессов. В данном виде моя функция заработала, однако она думает слишком долго. Подскажите плиз, какие бывают способы ускорить такие вещи?


Код:

String^ GetNameX()
       {
         Process^ pp;
         int i;
         String^ ss;

         for (i=0; i<=100500; i++)
         {
            try
            {
               pp = Process::GetProcessById(i);    //пытаемся определить имя процесса
               ss = ss + "\n" + Convert::ToString(i) +"==" + Convert::ToString(pp);       //определили, записываем в переменную
            }
            catch (Exception^ ee)
            {               
               ;             //хееееегакс процесса не существует, и похег               
            }
         }
          return ss;
       }


10 сен 2011, 22:11
Профиль

Сообщение CPP, как ускорить код?
Возможно так же как и в css\html. Уменьши размер файла с кодом. Убери все ненужные пробелы. Сделай все в одну строчку.


10 сен 2011, 22:20
Профиль

0
Сообщение CPP, как ускорить код?
количество пробелов не влияет т.к. компиляторы обычно их убирают автоматом
единственный вариант искать более быстрые алгоритмы, спец функции и тп


10 сен 2011, 22:22
Профиль

0
Сообщение CPP, как ускорить код?
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Код:
#include
#include
#include
#include

// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1

void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[MAX_PATH] = TEXT("");

    // Get a handle to the process.

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );

    // Get the process name.

    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName,
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }

    // Print the process name and identifier.

    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );

    // Release the handle to the process.

    CloseHandle( hProcess );
}

int main( void )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    {
        return 1;
    }


    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name and process identifier for each process.

    for ( i = 0; i < cProcesses; i++ )
    {
        if( aProcesses[i] != 0 )
        {
            PrintProcessNameAndID( aProcesses[i] );
        }
    }

    return 0;
}


10 сен 2011, 22:37
Профиль WWW

0
Сообщение CPP, как ускорить код?
Спасибо, DDUH, походу из-за "try catch" тормозит, реально извращение, попробую через if (NULL != hProcess ){ }, но надо будет про threading почитать, не особо представляю как вообще распарралеливать и как потом эти куски собирать обратно.


10 сен 2011, 22:57
Профиль

0
Сообщение CPP, как ускорить код?
Cespenar писал(а):

Спасибо, DDUH, походу из-за "try catch" тормозит, реально извращение, попробую через if (NULL != hProcess ){ }, но надо будет про threading почитать, не особо представляю как вообще распарралеливать и как потом эти куски собирать обратно.

Ты ничего не понял.

for (i=0; i<=100500; i++) // - вместо того чтобы перебирать все процессы подряд, нужно вызвать системную функцию получения множества всех процессов - EnumProcessModules
Эта функция вернёт тебе массив ID всех процессов, и пробегая по массиву получаешь имена.

Ты же пытаешься 100500 раз вызывать Process::GetProcessById(i), хотя процессов в системе от силы 100.


10 сен 2011, 23:03
Профиль WWW

0
Сообщение CPP, как ускорить код?
про пробелы это понятно как день.

а вот можно по подробнее про EnumProcessModules эта процедура возвращает множество только активных процессов ?


10 сен 2011, 23:08
Профиль

0
Сообщение CPP, как ускорить код?
Цитата:

Ты ничего не понял.

for (i=0; i<=100500; i++) // - вместо того чтобы перебирать все процессы подряд, нужно вызвать системную функцию получения множества всех процессов - EnumProcessModules
Эта функция вернёт тебе массив ID всех процессов, и пробегая по массиву получаешь имена.

Ты же пытаешься 100500 раз вызывать Process::GetProcessById(i), хотя процессов в системе от силы 100.


Дада, уже въехал;) только похоже не массив ID, а просто левый массив процессов из которых я получаю ID, имя и еще что-нибудь.


10 сен 2011, 23:18
Профиль

0
Сообщение CPP, как ускорить код?
Cespenar писал(а):

Цитата:

Ты ничего не понял.

for (i=0; i<=100500; i++) // - вместо того чтобы перебирать все процессы подряд, нужно вызвать системную функцию получения множества всех процессов - EnumProcessModules
Эта функция вернёт тебе массив ID всех процессов, и пробегая по массиву получаешь имена.

Ты же пытаешься 100500 раз вызывать Process::GetProcessById(i), хотя процессов в системе от силы 100.


Дада, уже въехал;) только похоже не массив ID, а просто левый массив процессов из которых я получаю ID, имя и еще что-нибудь.



это назывется - запись +_+


10 сен 2011, 23:23
Профиль

0
Сообщение CPP, как ускорить код?
написать такое сообщение на игровом портале,это возможность показать какой ты?
пойду спрошу на форуме хирургов какого мясца мне купить к ужину


11 сен 2011, 08:05
Профиль

0
Сообщение CPP, как ускорить код?
Floy писал(а):

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

Человек просто спросил совета. Форум хоть и игровой, но тут есть специальные разделы для таких вопросов, что мешает ему спросить? Если у тебя не хватает мозгов написать что-то дельное, то лучше промолчи.


11 сен 2011, 09:08
Профиль
Начать новую тему Ответить на тему


Перейти:  

Запчасти liugong . В Киеве и Львове болденон купить у нас с доставкой Новой почтой в течении 2 рабочих дней от заказа.
На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru