代码运行缓慢
Slow running code
我的项目中有以下功能:
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 次。 我可能在这里做了一些不必要的事情。
代码可能会稍微优化:
L3Address
类具有方便的方法operator<<
,因此不需要使用L3AddressResolver().resolve(realLast)
(INET API)。- 应该避免使用
cout
进行日志记录(OMNeT++ 手册)。 应该使用EV
而不是cout
。 - 要在模块向量中获取模块的索引,可以使用
cModule
类中的getIndex()
方法。
呈现的代码可以重写为以下代码:
void UDPBasicApp::incrementReceiveCounter(const L3Address& dest) {
cModule *destHost = L3AddressResolver().findHostWithAddress(dest);
if (destHost) {
int realDestNumber = destHost->getIndex();
recArray[realDestNumber]++;
EV << "Destination is: " << destHost->getName() <<", IP is: "
<< dest << ", Number of destination is: "
<< realDestNumber << std::endl;
}
}
要提高模拟速度,您应该考虑:
- 在发布模式下构建模拟。
- 在 Cmdenv 模式下运行模拟。
如果要向同一目标发送 1000 封邮件,则正在执行 999 次不必要的名称查找。其中每个都可能需要往返到网络上的 DNS 服务器。这是非常低效的。
您应该解析一次名称,第一次需要联系特定目的地。缓存它以备下次使用。一个好的解析器会告诉你缓存它多长时间是安全的。更好的解析器将使用操作系统为您进行解析(和缓存),但即使您拥有其中之一,您仍然会对操作系统进行不必要的调用。
如果没有 MCVE,或者至少对L3AddressResolver
确切的作用有一些了解,就不可能提供更多细节。
但是,如果每次目的地都不同,那么您真的无能为力。您需要留出时间进行查找。您能做的最好的事情就是异步执行它,以便可以同时进行多个查找。
根据应用程序的结构和要求,以及如果您事先知道它们是什么,您可能需要考虑提前查找所有名称。然后你仍然花费相同的时间,但在不同的地方(并且可能在其他功能发生时异步);那么这个特定的功能将非常快。只有你能说这是否有帮助。
相关文章:
- 基于Q3DScatter的自定义图表,QCustom3DItem运行缓慢
- 与地图C++相比,无序地图运行异常缓慢
- 内存在 32 位嵌入式平台上运行缓慢
- 代码运行缓慢
- 公平的读者-作家票证旋转锁在C++运行缓慢
- CPP 程序在服务器上运行缓慢
- SIMD程序缓慢运行时
- 如果对象父对象是窗口,则Qt程序运行缓慢
- OpenGL代码在一台计算机上运行缓慢(但在其他计算机上则不然)
- GPU 调用后,CPU 代码运行缓慢
- 缓慢运行的方向转换代码
- 使用Qt c++ QWebView会导致GUI运行缓慢
- 由于编译器优化,代码运行缓慢
- c++ MFC应用程序在windows 7上运行缓慢,但在XP上运行迅速
- MySQL在c++中运行缓慢
- 为什么我插入到STL列表运行缓慢
- Vector push_back()与reserve()运行缓慢
- 字符串和unordered_map运行缓慢
- 字符数组和printf使程序运行缓慢
- 使程序运行缓慢