资料库: 无需 DLL 的文件映射 - 页 2

 

亚历克斯,当一个文件不再需要时,如何释放内存?

我的意思是,这样我就不必因为可能有很多文件而占用几兆或几千兆内存了。

 
CloseHandle 有帮助吗?
 
sergeev:

CloseHandle 有帮助吗?

CloseHandle 在 Close() 内被调用,但它不会释放内存,重新打开(不创建)后就能获得保存的信息。

这意味着内存已被占用。

void CMemMapFile::Close()
  {
   if(m_hmem!=NULL) CloseHandle(m_hmem); m_path=""; m_hmem=NULL; m_size=0; m_pos=0; m_mode=-1; // 关闭句柄
  }
 

我认为最好将文件大小改为 0,以保证内存释放

可以通过 Grows 来增加文件大小,也可以通过添加 Delete 来将分配的内存清零,从而杀死文件。

 

谢谢。非常有必要。

也许还有一个题外问题:文件映射能否在优化时使用外部基因(比如在终端运行的脚本)而不是标准基因?

 
joo:

谢谢。非常有必要。

也许还有一个题外问题:文件映射能否在优化时使用外部基因(比如在终端运行的脚本)而不是标准基因?


除非是半自动的,否则无论如何都得有人启动测试器并停止它(这是在打算使用 claud 的情况下)。

如果没有 claude,使用测试仪就没有意义了。

 
Urain:

CloseHandle在Close()中被调用,但它不会释放内存,只要重新打开(不创建),就能找回保存的信息。

我曾遇到过这种情况。写入程序会关闭句柄,而读取程序不会。但它可以读取数据。但在 Windows 中进行一些操作后,文件中的数据就会发生变化。

这意味着 RAM 已满。

我不确定。
 

joo:

在优化时,文件映射是否可以调整为使用外部基因(例如在终端运行的脚本)而不是标准基因?

如果使用文件来存储中间数据,当然可以,但最重要的是在某些参考点将数据重置到磁盘上,因为一旦发生意外,信息就会不可挽回地丢失。
 
sergeev:

我也遇到过这种情况。写入程序会关闭句柄,而读取程序不会。但它可以读取数据。但在 Windows 中进行一些操作后,文件中的数据就会发生变化。

我不确定。
我想我们需要以一种有保证的方式进行检查。但我不知道该怎么做。
 
Urain:

除非是半自动的,否则无论如何都得有人来启动和停止测试仪(这是在您打算使用 claud 的情况下)。

ZY,如果没有 claud,使用没有 claud 的测试仪就没有意义了。

是的,claud.... 有问题。

我的意思是,用户在图表上运行脚本,然后在测试器中开始优化(脚本开始 通过文件映射将必要变量 "滑入 "优化后的智能交易系统)。至于如何、何时以及在什么条件下停止优化,则是另一个问题(例如,当智能交易系统收到 "准备就绪 "标志时,智能交易系统的填料就会停止工作,因此测试器将在空闲模式下执行剩余的运行--这样它就会快速运行剩余的运行)。

情况是这样的