В моем проекте есть следующая функция:
void UDPBasicApp::incrementReceiveCounter(L3Address dest) {
char numberOfDestNode[10];
char name[50];
strcpy(name,L3AddressResolver().findHostWithAddress(dest)->getFullPath().c_str());
char temp[20];
char *last = strrchr(name, '.');
char *realLast = last + 1;
std::cout << "Destination is: " << realLast<<", IP is: "<<L3AddressResolver().resolve(realLast);//=====
strcpy(temp,realLast);
strtok(temp,"[");
strcpy(numberOfDestNode, strtok(NULL, "]"));
int realDestNumber = std::stoi(numberOfDestNode);
recArray[realDestNumber]++;
std::cout<<", Number of destination is: "<<realDestNumber<<std::endl;//=================
}
Код выполняется очень красиво и быстро, но когда эта функция вызывается, выполнение идет значительно медленнее. Этот код является частью проекта моделирования в Omnet ++, и эта функция вызывается каждый раз, когда узел отправляет сообщение другому. Итак, подумайте, если есть 1000 узлов, эта функция будет вызываться 1000 раз. Возможно, я здесь делаю что-то ненужное.
cout
? После этого вы можете избежать хотя бы части копирования строк, но вам действительно следует профилировать, прежде чем вносить дополнительные изменения. - person Useless   schedule 07.03.2018std::cout
может быть очень медленным, в зависимости от того, на что он выводит (например, терминал). Можете ли вы сохранить результаты в памяти, чтобы распечатать их позже? - person Galik   schedule 07.03.2018cout
вообще не влияет на время, что-то происходит чрезвычайно медленно. В любом случае, понимание должно заключаться в том, что вам нужно измерить и научиться профилировать. - person Useless   schedule 07.03.2018