【问题标题】:Is there any way to force fast content type determination for slow file system有什么方法可以强制对慢速文件系统进行快速内容类型确定
【发布时间】:2012-03-19 17:00:13
【问题描述】:

我有一个虚拟文件系统,它本来就很慢,因为它使用 Web 服务作为后端(Google Docs API)。

它工作得很好,但有一点需要注意:GTK 应用程序使用 GtkFileChooser,它会尝试确定文件的内容类型以显示图标或其他内容。当它遇到无法通过扩展名识别的文件时,它会读取初始数据块以尝试使用它来确定文件类型。在我的情况下,这会导致从网络下载整个文件,这会极大地减慢文件对话框中的目录列表。

事实证明,Gio(GtkFileChooser 的后端)支持 2 种内容类型发现模式:常规(具有属性 'standard::content-type')和快速('standard::fast-content-type'),仅查看文件扩展名。但是,似乎 GtkFileChooser 只查询 'standard::content-type'。

GTK 真的总是尝试使用慢速算法进行内容类型发现吗?即使是已知的慢速文件系统,如 NFS?

有什么方法可以挂载我的文件系统,使其只使用快速内容类型发现?

【问题讨论】:

  • 你会接受改变 glib 的代码和 LD_PRELOAD 吗?

标签: linux filesystems gtk


【解决方案1】:

查看 glib 的源代码,我相信没有办法为安装在操作系统文件系统层次结构中的虚拟文件系统强制快速内容类型发现。从 gio 的 POV 来看,它是一个本地文件系统,因此它假定它具有快速读取访问权限。其他远程文件系统(如 NFS)不受影响,因为精确的内容类型发现只需要查看前 4KB 的数据。

因此,对于您的情况,我建议以下解决方案:

  1. 下载 glib 的源代码。在 Ubuntu 中,您可以通过键入:

    apt-get source glib2.0
    
  2. 打开文件gio/glocalfile.c

  3. 找到函数get_content_type
  4. 在函数的开头添加以下行:

    fast = 1;
    
  5. 编译 glib。

  6. 要么在系统位置安装 glib,要么使用LD_PRELOAD 加载新的 gio 库。

希望这会有所帮助。如果您需要更多详细信息,请随时告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2011-01-02
    • 2015-08-30
    • 1970-01-01
    • 2020-12-01
    • 2011-10-22
    相关资源
    最近更新 更多