我想确保我的应用程序在处理慢速文件系统(例如网络、CD/DVD 或旋转硬盘)上的文件时不会出现任何 UI 冻结。
我直接使用 Cocoa 文件系统操作。我担心仅仅为了测试而模拟或抽象所有它会花费太多精力,而且我的程序可能会以不明显的方式接触文件系统。
我尝试使用网络驱动器进行测试,但操作系统缓存使测试不可重复并且......太快了:)
有没有像故意放慢 MacFuse 文件系统这样的东西?其他一些方法可以让我找到由意外延迟引起的所有 UI 打嗝和竞争条件?
我想确保我的应用程序在处理慢速文件系统(例如网络、CD/DVD 或旋转硬盘)上的文件时不会出现任何 UI 冻结。
我直接使用 Cocoa 文件系统操作。我担心仅仅为了测试而模拟或抽象所有它会花费太多精力,而且我的程序可能会以不明显的方式接触文件系统。
我尝试使用网络驱动器进行测试,但操作系统缓存使测试不可重复并且......太快了:)
有没有像故意放慢 MacFuse 文件系统这样的东西?其他一些方法可以让我找到由意外延迟引起的所有 UI 打嗝和竞争条件?
最简单的答案是其他地方提到的MacFUSE ;这很容易模拟。您也可以尝试通过 NFS 安装共享,然后使用内置的 限制它ipfw
,例如:
ipfw pipe 1 config 1KByte/s ipfw add 1 pipe 1 src-port 2049
或者如果您使用的是 WebDAV
ipfw 添加 1 个管道 1 个 src 端口 80
然后,这将通过您定义的任何管道级别滴灌请求。之后您应该能够再次摆脱它:
ipfw 删除 1
也许买一个慢速拇指驱动器?我在百思买发现了一些冰河。通过几个 USB 集线器和键盘将它们插入,因此它们将处于一个非常棘手的连接上。
-W
用他们的 Cocoa 框架编写一个 MacFUSE 文件系统非常容易。事实上,我认为甚至包含一个示例系统,它只是镜像本地文件系统。为什么不快速调整该代码,以便在每次操作期间调用 sleep() 片刻?
根据您担心出现问题的地方,我的第一个想法是在应用程序和文件 i/o 之间添加一层额外的函数调用,并在该层中构建一些 sleep() 调用。也就是说,无论您使用什么语言,将“read”调用替换为“readDelegate”,并让 readDelegate 休眠一段指定的时间,然后进行真正的读取并返回值。当您准备好投入生产时,您甚至不必拉出额外的层,只需移除睡眠即可。
软驱呢?必须有外部的,您可以通过 USB 或其他方式简单地连接...