首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次迭代保存模拟数据的最佳策略是什么?

每次迭代保存模拟数据的最佳策略是什么?
EN

Stack Overflow用户
提问于 2012-12-17 20:13:06
回答 1查看 265关注 0票数 0

对于一个复杂的问题,我有一个多目标粒子群优化算法,它使用了一个大种群(4000个粒子),并且是一个耗时的模拟(4-6个小时的执行)。

由于该算法保存了存档,是迄今为止找到的最佳解决方案的存储库,为了分析算法的收敛性和行为,我需要在每次迭代时从存储库中保存一些数据,有时还保存整个种群的数据。

目前,在每次迭代中,我(使用Java语言)从粒子的对象(从存储库和/或填充)复制一些属性,将其格式化为一个StringBuffer,该方法运行在一个独立的线程中,与模拟不同,只有在程序执行结束时,我才将它保存到一个文本文件中。

我认为我的算法这样做是在用不好的方式消耗内存。但是,考虑到性能,我不知道保存所有这些数据的最佳方法是什么:我是否应该遵循相同的逻辑,而是在每次迭代时保存一个.txt文件,而不是在算法结束时这样做?还是应该保存到数据库中?如果是这样的话,我应该在每次迭代中保存它,还是在结束时或下一次保存?还是我应该以不同的方式对待它?

编辑:存储库数据通常在5-10 MB的范围内,而总体数据占用100到200 MB的内存。每次我运行程序时,我需要大约20个模拟来分析平均收敛性。

EN

回答 1

Stack Overflow用户

发布于 2012-12-17 21:52:20

StringBuffer使用一个数组来保留字符,这是一个连续的内存区域。每当需要扩展时,它都会创建一个新的数组,该数组的大小是原来的两倍。通常,对于大多数应用程序来说,它已经足够了,但是如果您认为这个缓冲区非常大,并且希望消除管理内存连续部分的开销,您可以用String列表(或StringBuffers)替换它。这将需要更多的内存,但它不需要这个内存是连续的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13921453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档