HDf5DotNet:文件关闭不同步?

时间:2017-10-03 08:03:46

标签: c# .net asynchronous synchronization hdf5

描述

我们目前正在针对我们的hdf5抽象层编写测试。

我们有一个测试,确保数据集类型更改不会影响我们的抽象层。为了测试这一点,我们每次要测试数据集类型更改时都会创建一个新的hdf5文件。 每次操作(读/写)后,hdf5文件都会关闭。

问题是当我们调用 H5F.Close()时,hdf5文件中的修改似乎不是同步编写

当我们的测试在调试中执行(使用分步调试器)时,测试正常工作

发布中执行时,测试被破坏,我们的抽象层读取数据集值,该值是上次修改前数据集的值< / strong>(来自以前的数据集类型)。

我们还发现,如果在I / O操作之间使用Thread.Sleep(1000)执行测试,则发布模式下的测试正确执行

问题

  • 致电 HDF5库时,您是否知道错误/遗忘的内容?
  • HDF5DotNEt中是否有办法从文件中获取活动/打开的对象数(数据集/组等...),因为 H5Fget_obj_count 不是在HDF5DotNet库中实现。

修改

十月2017年第4期

  • 我使用HDF5DotNet源来构建我自己的版本,包括 H5Fget_obj_count 功能。关闭文件时关闭所有对象。
  • 还实施了 H5Pset_fclose_degree 功能,强制关闭度 H5F_CLOSE_STRONG ,无需更改。
  • 使用H5F.Close()后,
  • hdf5文件可以立即打开并具有写入权限

经测试/实施的解决方案

  • 在关闭文件之前强制 H5F.Flush ,无效
  • 检查HDF5库中的每个对象是否已正确关闭,包括:
    • H5DataSetId
    • H5FileId
    • H5GroupId
    • H5AttributeId
    • H5DataTypeId
    • H5DataSpaceId
    • H5PropertyListId
  • 试图查找C ++ HDF5库是否存在内存泄漏(错误始终来自相同的断言,读取值与HDF5文件内容一致)

的Env

  • Visual Studio 2017
  • HDF5DotNet.x64 v1.8.9
  • NUNit v3.6.1
  • NUnit3TestAdapter v3.7.0

任何帮助将不胜感激。谢谢你抽出时间。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

HDF5库工作正常,错误来自我们的对象之一。

在测试期间,我正在更新缓存的对象。缓存最后修改时间跟踪器分辨率是第二种在进行密集单元测试时不精确的方法。由于此对象在HDF5文件中定义模型,因此会导致读取前一个定义的类型,而不是预期的数据类型。

谢谢你的时间!