加载外部数据时闪存 CS4 IDE 内部缓存

Posted

技术标签:

【中文标题】加载外部数据时闪存 CS4 IDE 内部缓存【英文标题】:Flash CS4 IDE internal cache when loading external data 【发布时间】:2011-03-29 00:59:17 【问题描述】:

从服务器 URLVariables 检索外部变量时,我的 Flash 卡在第一个编译值上。每当我更新服务器值时,闪存都会编译第一个旧值。只有在我重新启动 CS4 IDE 值后才会更新。有内部缓存吗?

我的代码没有问题,因为它在我的 mac 上运行良好,但在 pc 上却不行。

【问题讨论】:

【参考方案1】:

它们存储在您系统的“临时 Internet 文件”缓存中(即 I.E. 的缓存)。我将 Firefox 作为我的默认浏览器,但它们仍存储在“AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5”子文件夹中。

这是我如何确定这一事实的。我首先通过将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate 设置为零来重新启用 Windows 7 中的 NTFS Last-Access-Time 更新,然后重新启动计算机。然后我打开 Visual Studio 并创建了一个程序,其中配置了 FileSystemWatcher 实例,如下面的代码所示:

FileSystemWatcher watcher = new FileSystemWatcher( "C:\\", "*.swf" );
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;

接下来,我在 Flash CS6 中测试了一个从远程服务器加载外部 SWF 文件的程序。它首先使用 URLLoader 类获取文件的字节,然后调用 Loader 实例的 loadBytes 方法来加载 SWF 的字节。 (使用 URLLoader 是绕过本地安全沙箱限制的一种解决方法,否则会阻止远程代码被加载到本地 SWF 的同一应用程序域和安全域中;这是我的代码库的要求,因为远程 SWF 使用定义的类在本地容器 SWF 中)。

“watcher_Changed”事件处理程序列出了 Flash IDE 的播放器访问或写入的文件,这就是出现的情况。

我的container SWF“basemovie3.swf”(主项目文件)是从目录加载的:

"C:\Users\[your_username]\AppData\Local\Adobe\Flash CS6\en_US\Configuration\CodeModel\cm-cache\SwcCache\basemovie3.swc1272273593\library.swf"

remote SWF“l003s.swf”(有问题的被缓存)是从目录加载的:

"C:\Users\[your_username]\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\IGH0THHW\l003s[1].swf"

所以你有它。远程加载的 SWF 是从 Internet 临时文件缓存中加载的。

尽管在远程加载的文件“l003s.swf”的 URL 中附加了格式为“?random=randomnumber&timestamp=currenttime”的查询字符串,但文件系统观察程序仍报告 NO WRITE 到任何 SWF 文件,尽管尝试加载使用不同的查询字符串多次尝试该文件,并在服务器上更新文件后进行更多尝试。

似乎清除文件的最佳方法是打开开始菜单并键入“临时”,您可以单击“更改临时 Internet 文件设置”、“删除 cookie 或临时文件”中的任何一个选项,或者“删除浏览历史”。它们都会将您带到临时 Internet 设置窗口,您可以在其中删除浏览历史记录和缓存。

【讨论】:

我想补充一点,Windows 10 和 Adob​​e Animate 的情况几乎相同。虽然清除 Microsoft Edge 的浏览器缓存不起作用。您必须打开 Internet Explorer 11 并以这种方式清除缓存。【参考方案2】:

这纯粹是一种猜测,但我怀疑 Flash 正在通过操作系统发出请求,并且结果被缓存在其他地方。无论哪种方式,解决此类问题的一种常见方法是在您的请求中附加一个无意义的变量 - 例如从 server.com/script.php?random=209327 加载数据,其中数字当然是随机的。这样每个请求的 URL 都不匹配任何先前的请求,并且您不会得到缓存的结果。

【讨论】:

我喜欢这个随机变量的想法。 它们实际上存储在 Internet Explorer 缓存中,附加随机变量不会阻止加载缓存的项目。这不是猜测,而是事实。看我的帖子。

以上是关于加载外部数据时闪存 CS4 IDE 内部缓存的主要内容,如果未能解决你的问题,请参考以下文章

STM32 从外部闪存引导,QUADSPI 引导加载程序

ActionScript 3 用于加载和预加载外部闪存或图像的通用类

用于加载和预加载外部闪存或图像的公共类

将外部 xml 文件导入闪存

STM32 链接器脚本仅用于来自 FLASH 的启动脚本,其他一切来自 RAM

从 Visual Studio IDE 运行时,项目无法加载图像资产