如何加快程序的启动速度
how to speed up my program's startup
我的程序需要加载很多大的wordlist文件,所以它总是需要很长时间才能启动。在崩溃中迅速恢复是非常低效的。我有一个初步的想法,但我不确定是否可行。是否有可能将文件加载到共享内存中,并在启动时附加到它?
你能给我一些想法或建议吗?有什么有价值的例子吗?如果你加载了200GB的数据,你要么做错了什么,要么你的应用程序不需要快速启动。
这绝对是可能的,只要你设计一个支持的格式静态初始化,或者只是原始数据。有两个可能性:如果你能设计一个原始的数据格式(除了PODS,没有指针);如果可移植性不是一个问题,包括跨不同版本的编译器(您提供该文件作为您的可执行包),那么你通常可以只mmap
文件。否则(我通常是这样做的),你可以写一个小程序将您的数据转换为c++定义(同样,只是pod)初始化项(静态),编译它,并链接它,作为DLL或静态。
根据程序的访问模式,最好是在需要时分段访问wordlist,而不是每次启动时都将整个wordlist加载到内存中。
SQLite非常适合这种用途。您必须完成将单词列表导入数据库文件的过程,然后您就可以开始工作了。
我建议您将单词列表拆分为许多动态/共享库。例如,一个库将包含常用词。这个小的你会在启动时加载。按需加载的其他库。这将减少启动时间。
减少启动时间的一个关键原则是只加载启动时需要的项目。其他项可以根据需要加载。
相关文章:
- 如何创建一个空的全局类并在启动时实例化它
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 使用 std::string () const 函数启动线程或未来
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- 如何创建线程序列以按照启动顺序执行任务?
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在挂钩启动新线程时解除挂钩进程
- 程序无法启动,因为缺少 libmpc-3.dll
- 在OS X 10.8上使用SDL 2启动速度非常慢
- Windows XP在C++中启动时读取文本文件的速度较慢;预取
- 加快Eclipse CDT的启动速度
- 加载主QT/QML GUI窗口减慢了启动画面的渲染速度
- 如何加快程序的启动速度
- Visual C++SSE函数在没有调试器的情况下启动时速度较慢