在 Windows 上使用 jCIFS 列出慢速文件

Posted

技术标签:

【中文标题】在 Windows 上使用 jCIFS 列出慢速文件【英文标题】:Slow file listing with jCIFS on Windows 【发布时间】:2013-01-13 16:34:29 【问题描述】:

jCIFS 是一个很棒的库,用于连接到 android 上的 SMB 共享,它几乎适用于我测试过的所有设置。

但是,在基于 Windows 的网络共享上使用 SmbFile.listFiles() 方法时,我确实会遇到非常慢的性能,但仅限于在 PC 上以实际用户身份登录时。简单地获取文件夹列表可能需要几分钟时间,有时根本没有任何反应。

如果我选择以访客身份登录(使用“访客”作为用户,密码为空),一切都会很快。通常不到一秒钟。

以下代码可以运行,而且速度很快:

try 
   NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", "guest", ""); // domain, user, password
   currentFolder = new SmbFile("smb://host-name-for-my-pc", authentication);
   SmbFile[] listFiles = currentFolder.listFiles();
 catch (Exception e)  // Using Exception for the sake of demonstration...

但是,此代码不起作用/非常慢:

try 
   NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", "my-username", "my-password"); // domain, user, password
   currentFolder = new SmbFile("smb://host-name-for-my-pc", authentication);
   SmbFile[] listFiles = currentFolder.listFiles();
 catch (Exception e)  // Using Exception for the sake of demonstration...

我与另一个正在使用 jCIFS 的人交谈,他遇到了同样的问题。

我尝试使用 ES 文件资源管理器连接到同一个共享,它也使用 jCIFS,无论使用真实帐户还是以访客身份登录都很快。

更新:

如果我改用SmbFile("username:password@server/"),它可以工作!不过,我真的希望它与NtlmPasswordAuthentication 一起工作。有什么想法吗?

【问题讨论】:

【参考方案1】:

使用new SmbFile("username:password@server/") 有效,所以我只是使用它。

【讨论】:

【参考方案2】:

在实例化任何 jCIFS 类之前尝试使用以下代码:

jcifs.Config.setProperty("resolveOrder", "DNS");

感谢Glenn's 回复 JCIFS: file retrieval is too slow to be usable

参考: https://jcifs.samba.org/src/docs/api/overview-summary.html

【讨论】:

【参考方案3】:

尝试使用new SmbFile("smb://host-name-for-my-pc/", authentication);。 以斜线结尾。

【讨论】:

你有任何证据证明它有效吗?如果不是,这应该是评论,而不是答案。 它不起作用,我在发布问题之前已经尝试了很久。【参考方案4】:

我在图书馆遇到了同样的问题。我可以看到解决问题的所有答案都没有域属性,我尝试不使用该属性并且我看到问题已解决,我认为该库默认用于 LAN,但如果您明确放置域执行很慢。

关于密码,我觉得登录共享文件夹比较慢是正常的。

【讨论】:

以上是关于在 Windows 上使用 jCIFS 列出慢速文件的主要内容,如果未能解决你的问题,请参考以下文章

JCIFS 是不是与 windows 2008 R2 域控制器不兼容?

性能:使用 JCIF 将文件复制到 Windows 网络非常慢

使用 Java 和 Samba JCIFS 访问文件

JCIFS:文件检索太慢而无法使用

JCIFS SmbException

JCIFS jcifs.smb.SmbException:连接到系统的设备无法正常工作