【发布时间】:2017-10-03 08:03:45
【问题描述】:
说明
我们目前正在编写针对 hdf5 抽象层的测试。
我们进行了一项测试,以确保数据集类型更改不会影响我们的抽象层。为了测试这一点,我们每次想要测试数据集类型更改时都会创建一个新的 hdf5 文件。 每次操作(读/写)后,hdf5 文件都会关闭。
问题是hdf5文件中的修改在我们调用H5F.Close()的时候好像不是同步写入的。
当我们的测试在调试中执行(使用逐步调试器)时,测试工作正常。
在release中执行时,测试被破坏,我们的抽象层读取一个数据集值,该值是数据集最后一次修改之前的值(来自以前的数据集类型)。
我们还发现,如果在 I/O 操作之间使用 Thread.Sleep(1000) 执行测试,则发布模式下的测试正确执行。
问题
- 您知道调用 HDF5 库 时会出现错误/忘记吗?
- HDF5DotNEt 中有没有办法从文件中获取活动/打开对象的数量(数据集/组等...),因为 H5Fget_obj_count 不是在 HDF5DotNet 库中实现。
编辑
八月。 2017 年 4 月
- 我使用 HDF5DotNet 源构建了我自己的版本,包括 H5Fget_obj_count 函数。关闭文件时所有对象都关闭。
- 还实现了函数 H5Pset_fclose_degree 以强制接近度为 H5F_CLOSE_STRONG,没有变化。
- hdf5 文件可以在使用 H5F.Close() 后立即以写入权限打开
经过测试/实施的解决方案
- 关闭文件前强制H5F.Flush,无效
- 检查 HDF5 库中的每个对象是否已正确关闭,包括:
- H5DataSetId
- H5FileId
- H5GroupId
- H5AttributeId
- H5DataTypeId
- H5DataSpaceId
- H5PropertyListId
- 尝试查找 C++ HDF5 库是否存在内存泄漏(错误始终来自相同的断言,并且读取的值与 HDF5 文件内容一致)
环境
- 视觉工作室 2017
- HDF5DotNet.x64 v1.8.9
- NUUnit v3.6.1
- NUnit3TestAdapter v3.7.0
任何帮助将不胜感激。感谢您抽出宝贵时间。
【问题讨论】:
-
是不同的进程读取文件还是不同的线程?
-
不,该文件仅供测试使用,测试是单线程的。
-
测试是否涉及一个进程写入文件,另一个进程读取文件?
-
不,只有一个进程
标签: c# .net asynchronous synchronization hdf5