我为游戏制作了一个GUI库。我的测试演示以60 fps运行。当我使用我的库的静态版本运行此演示时,它在taskmanager中占用2-3%的cpu。当我使用DLL版本时,它使用大约13-15%。这是正常的吗?是的,我怎么能优化它?我已经要求它使用/ O2来实现大多数函数内联。DLL比静态链接慢吗?
回答
直到DLL有机会一次执行其功能时,才启动性能计时器。这使得它有时间加载到内存中。然后启动计时器并检查性能。它应该基本上匹配静态库。
还要记住,DLL的加载位置可以极大地影响它加载的速度。 DLL的默认基地址是0x400000。如果您在该位置已经有其他的DLL,那么加载过程必须执行一个昂贵的重新寻址步骤,这将进一步推迟您的时间。
如果你有这样的冲突,只需在Visual Studio中选择一个不同的基地址即可。
提及基地址问题。 – 2010-11-10 22:27:56
基址问题只会在加载时出现问题。 – 2011-03-03 23:52:55
你将有加载DLL的开销(应该只是在开始时)。它不是直接调用的静态链接,所以我期望有少量的开销,但不会太多。
但是,有些DLL会有更高的开销。我正在考虑COM对象,尽管可能有其他例子。 COM在对象之间的函数调用中增加了很多开销。
对于什么是静态/动态链接有点不清楚。您的lib的DLL是否与其依赖关系静态链接?是否有可能DLL正在调用其他DLL(这会很慢)?也许尝试在你的可执行文件中运行valgrind中的profiler来确定所有CPU使用率来自哪里。
如果您调用DLL函数,则不能为调用者内联。你应该考虑一下你的DLL边界。
可能是因为你的应用程序有一个小的引导程序exe,它只是在你的DLL中执行一个主循环更好。这样可以避免函数调用的大量开销。
- 1. 如何静态链接.DLL?
- 2. 在Windows DLL上静态链接libgcc
- 3. 从dll链接静态成员
- 4. MSVC - boost :: python静态链接到.dll(.pyd)
- 5. 数学库是静态链接的吗?
- 6. 从动态DLL访问静态链接库中的静态变量/函数
- 7. 我需要静态库来静态链接吗?
- 8. 将静态链接库转换为动态DLL
- 9. 静态链接OpenCV
- 10. gcc静态链接
- 11. 链接静态stdlib.so
- 12. pthread静态链接
- 13. 静态成员访问比AS3中的实例成员慢吗?
- 14. UNIX:静态库链接到静态库
- 15. 链接到链接到静态.lib的静态.lib的问题
- 16. 静态链接的可执行文件比动态链接的可执行文件更快吗?
- 17. Angular的深层链接 - 动态链接vs静态链接
- 18. c静态链接到lib并仍在请求DLL
- 19. 如何静态链接我的MFC扩展DLL?
- 20. 将dll转换为静态链接的库?
- 21. 为什么在C++静态DLL链接中使用LIB?
- 22. Visual Studio 2008 IDE - 静态链接一个C Dll库
- 23. 尽管有静态链接,Opencv 3.2.0.dll仍然丢失
- 24. 静态在C#链接COM DLL(避免regfree)
- 25. 如何停止使用DLL并静态链接到LIB?
- 26. 静态链接的应用程序 - 无效或损坏的DLL
- 27. DLL项目中的静态链接函数
- 28. 静态链接优势
- 29. 静态链接SHFolder组件
- 30. 静态库链接失败
你是否对你的应用进行了简介? – 2010-11-10 22:23:41
您应该分析并查看重要区别在哪里。 – 2010-11-10 22:23:58
没有理由分析。不明白的猜测应该足以找出应用程序中可能出现的瓶颈。地狱,甚至不需要看源代码。 – 2010-11-10 22:38:53