我正在研究的优化项目之一现在广泛使用EPANet.我们在EPANet中反复调用两种模拟方法,以了解水如何流经配水网络.
HydraulicSim是我们使用的类别之一.查看重载simulate方法:
public void simulate(File hyd) throws ENException {
...
}
public void simulate(OutputStream out) throws ENException, IOException {
...
}
public void simulate(DataOutput out) throws ENException, IOException {
...
}
Run Code Online (Sandbox Code Playgroud)
我们使用的另一个类是QualitySim.在这里,我们还使用重载simulate方法:
public void simulate(File hydFile, File qualFile) throws IOException, ENException {
...
}
void simulate(File hydFile, OutputStream out) throws IOException, ENException {
...
}
Run Code Online (Sandbox Code Playgroud)
这是我们目前正在做的事情:
File对象,hydFile和qualFile.HydraulicSim.simulate上hydFile.QualitySim.simulate的hydFile和qualFile.问题是我们必须做很多次.对于一个大问题,我们可以做到数十万甚至数百万次.您可以想象减速反复创建/写入/删除这些文件的原因.
所以我的问题是:我是否可以创建这些文件,使它们只驻留在内存中,永远不会触及磁盘?每个文件都很小(我说的是几百个字节),所以把它们扔进内存不会有问题; 我只需要弄清楚如何.除了MappedByteBuffer之外,我在周围搜索并没有找到太多,但我不确定如何,或者甚至可能,File从该类创建一个.
欢迎任何建议!
最直接的解决方案是在这里安装ramdisk和store文件.然后你不需要触摸你的代码和文件访问将闪电般快:-)
Linux的
# mkfs -q /dev/ram1 8192
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache
Run Code Online (Sandbox Code Playgroud)
苹果系统
视窗
向 EPANet 团队提交问题可能是值得的。模拟方法都简单地使用 File 对象来获取输入和输出流。如果他们提供了一种QualitySim.simulate将流作为参数的方法(他们对输出流而不是输入流执行此操作),那么您可以绕过 FS。或者直接分叉然后自己做。
| 归档时间: |
|
| 查看次数: |
4922 次 |
| 最近记录: |