【问题标题】:HDf5DotNet : File close not sync?HDf5DotNet:文件关闭不同步?
【发布时间】: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


【解决方案1】:

回答我自己的问题:

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

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

感谢您的宝贵时间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多