【问题标题】:Cheat exclusive access locked files in Windows (7)在 Windows 中作弊独占访问锁定文件 (7)
【发布时间】:2011-03-06 23:33:17
【问题描述】:

我目前的任务是将文件加载到页面缓存中,并且我也想加载锁定的文件。目标无非是主动将数据集保存在 RAM 中,减少第三方应用程序的加载时间。

影子副本是我对此的第一个想法,但不幸的是似乎有分离的页面缓存。

那么有什么办法可以绕过排他锁机制作弊吗?就像在磁盘上获取文件片段位置,访问整个磁盘并直接读取(我担心这是另一个单独的页面缓存,无论如何)?

或者是否有一种非常不同的方法来引导页面缓存,例如一些可以被告知将特定文件加载到页面缓存中的 Windows API?

【问题讨论】:

  • 如果文件已经被锁定,这是否意味着第 3 方应用程序正在运行,因此不需要任何帮助启动?
  • 以大型数据库文件为例。它是独占打开和锁定的,因为 DB 应用程序是唯一期望 a) 写入文件和 b) 对文件具有一致视图的应用程序。此外,排他锁很容易防止多个实例的事故。 但是数据库应用程序不会读取整个文件,只会读取必要的部分和索引。我想通过将所有数据读入页面缓存来“帮助”该应用程序。
  • 是什么让您认为您可以比操作系统更多地“帮助”程序?
  • 操作系统不敢将预读增加到几 GB :-)

标签: windows file-io


【解决方案1】:

您可以从内核模式驱动程序或使用我们的 RawDisk 产品访问 Windows 中的锁定文件。但是对于您的任务(加速数据库文件访问),这将无法正常工作,因为 Windows 的文件系统缓存大小是有限的(它不会容纳 GB 的数据)。

一般来说,如果我要开发一个大型软件项目(对于小型应用程序所需的工作量非常巨大),我会执行以下操作:创建一个由内存存储支持的虚拟驱动器,呈现 DB 文件通过该虚拟磁盘到应用程序,并在异步更改时将驱动器内容刷新到磁盘。所有这些都应该在内核模式下完成(这是开发时间增长到 12-15 个工作月的地方)。

理论上,使用我们的虚拟存储产品之一也可以做到这一点,但返回到用户模式进行回调处理将消除您将数据移入 RAM 所获得的一切。

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2020-06-27
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多