1

这是场景:

  • 我的客户端机器通过路由器连接到数百英里外的服务器(我认为它是某种 VPN)
  • 我的 VB6 程序正在等待在服务器上创建文件(映射驱动器)
  • 我的 vb6 程序在看到该文件时,通过其 unc 路径在本地获取该文件并在底部添加一些文本,然后在本地打印到斑马打印机(这是我在下一个循环之后立即处理的一批文件)
  • 这大约需要 30 秒(应该不到 1 秒)
  • 当我以某种方式远程连接以进行故障排除时,我让它以正常速度打印,没有 30 秒的延迟
  • 在对从 AV 扫描到文件夹权限的所有问题进行故障排除时,我开始怀疑,当我打开映射文件夹以查看放置到映射文件夹中的文件时,我每次文件操作的速度/延迟都会消失。
  • 客户运行它的第二天 - 延迟又回来了
  • 我正在考虑在批处理开始测试之前添加一些代码来“打开”该窗口,但甚至不确定如何编写代码。

所以我的问题是:可以在 Windows 资源管理器中打开映射文件夹以某种方式加快我的程序传输文件的速度吗?这似乎是正在发生的事情,但在我看来,这应该没有什么区别。

4

2 回答 2

4

有同样的问题,“内部”技术人员可以将其指向网络中文件系统的缓存(操作系统级别)。该缓存每隔这么多秒(在我的情况下为 15 秒)仅刷新一次。“关闭”和“重置”都不能强制服务器/PC 更快地刷新文件(甚至文件列表框中的 .refresh 也不行)。

所以,当我通过网络用“Dir”询问文件是否存在时,15 秒后我得到了答案。

但是,当我假设文件存在时,我会进行文件复制,然后等待错误,惊喜……我立即得到文件,或者立即得到错误。

顺便说一句,没有必要进行文件复制(例如,如果它是一个大文件)。重命名(并再次将其重命名为原始文件名)对我来说也是如此。

我们花了很多时间试图解决这个问题,但我们发现我们需要深入到操作系统中(并且每个版本都不同),所以我们选择使用“硬编码”文件,也就是说,我们让服务器制作本地(即在服务器上)包含他看到的文件的文本文件。该文本文件具有工作站知道的硬编码名称……然后工作站可以立即访问文件,而无需等待通过网络刷新文件系统。

这有点奇怪,我知道,但它确实对我们有用。

于 2012-11-11T20:42:23.250 回答
0

别客气。也许对我们的解决方法的下一个澄清可能会有所帮助。

当文件存在时,它在网络上立即可见。当在服务器上创建一个新的(不是由读取客户端完成的创建)时,缓存的目录列表需要 15 - 30 秒才能刷新并对客户端可见(在 VB 中)。

远程连接程序通常会绕过此目录列表缓存。我们没有在 VB 中找到一种好的、经济实惠的方法来做到这一点,但这种变通方法对我们有用。

现在我们使用一堆已知的文件名,服务器上已经存在的文件(对客户端可见)。在带有硬编码名称的文本文件中,客户端可以找到哪些文件是供他阅读的。

奇怪的是......读取意思文件(在文本文件中找到)正在读取内容几乎没有任何延迟(在我们的测试中不到 1 秒)。延迟似乎只是文件名的外观,而不是它们的内容。

于 2012-11-13T20:54:11.947 回答