我的程序需要加载许多大的wordlist文件,因此启动总是需要很长时间。 在崩溃中快速恢复是如此低效。我有一个原创的想法,但我不确定它是否可行。是否可以将文件加载到共享内存中,并在启动时只附加到它?
你能给我一些想法或建议吗?有没有有价值的实例?
答案 0 :(得分:13)
如果您正在加载200GB的数据,那么您要么做错了什么,要么您的应用程序不需要快速启动。
答案 1 :(得分:5)
如果您设计支持的格式,这绝对是可能的
静态初始化,或者只是原始数据。那里有两个
可能性:如果你可以设计一个原始数据格式(除了PODS,
没有指针);如果可移植性不是问题,包括交叉
不同版本的编译器(您提供的文件作为您的一部分
可执行包),那么你通常只需要mmap
该文件。
否则(我通常做的),你可以编写一个小程序
将您的数据转换为C ++定义(同样,只有POD)
初始化程序(静态),编译它,并将其作为DLL或链接
静态。
答案 2 :(得分:4)
根据您的程序的访问模式,您可能最好根据需要随意访问wordlist,而不是在每次启动时将整个内容加载到内存中。
SQLite非常适合此类目的。您必须完成将单词列表导入数据库文件的过程,然后您才能开展业务。
答案 3 :(得分:1)
我建议你将单词列表拆分成许多动态/共享库。例如,一个库将包含常用词。这是你在启动时加载的那个小的。您可以按需加载的其他库。这会减少启动时间。
减少启动时间的关键原则是仅加载启动时所需的项目。如有必要,可根据需要加载其他物品。