Pregunta

Quiero asegurarme de que mi aplicación no tenga ningún bloqueo de la interfaz de usuario cuando trabaje en archivos en un sistema de archivos lento (por ejemplo, en red, CD / DVD o HDD).

Estoy usando las operaciones del sistema de archivos Cocoa directamente. Me temo que sería demasiado esfuerzo simularlo o abstraerlo todo solo para realizar pruebas, y además podría haber formas no obvias en las que mi programa toca el sistema de archivos.

He intentado usar unidades de red para realizar pruebas, pero el almacenamiento en caché del sistema operativo hace que las pruebas no se puedan repetir y ... demasiado rápido :)

¿Hay algo como un sistema de archivos MacFuse deliberadamente lento? ¿Algún otro método que me permita encontrar todos los problemas de UI y las condiciones de la carrera causados ??por retrasos inesperados?

¿Fue útil?

Solución

La respuesta más fácil es MacFUSE como se indica en otra parte; eso es bastante fácil de simular. También puede intentar montar un recurso compartido a través de NFS y luego aplicar una limitación de bits utilizando el ipfw incorporado, como:

ipfw pipe 1 config 1KByte / s ipfw add 1 pipe 1 src-port 2049

o si estás usando WebDAV

ipfw add 1 pipe 1 src-port 80

Esto luego enviará las solicitudes a cualquier nivel de tubería que hayas definido. Debería poder deshacerse de él nuevamente con:

ipfw delete 1

Otros consejos

Tal vez comprar una unidad de disco lento? He encontrado algunos en Best Buy que eran glaciales. Conéctelos a través de varios concentradores USB y quizás también un teclado, para que estén en una conexión muy pequeña.

-W

Escribir un sistema de archivos MacFUSE con su framework Cocoa es muy fácil. De hecho, creo que incluso hay un sistema de ejemplo incluido que simplemente refleja el sistema de archivos local. ¿Por qué no adaptar rápidamente ese código para que llame a sleep () por un momento durante cada operación?

Dependiendo de dónde esté preocupado por tener problemas, lo primero que pensaría sería incluir una capa adicional de llamadas de función entre la aplicación y el archivo i / o, y en esa capa crear algunas llamadas sleep (). Es decir, sea cual sea el idioma que esté utilizando, reemplace la " lectura " llame con " readDelegate " ;, y deje que readDelegate duerma durante un tiempo específico, luego realice la lectura real y devuelva el valor. Cuando estés listo para comenzar la producción, ni siquiera tendrías que sacar la capa adicional, solo quita el descanso.

¿Qué tal una unidad de disquete? Debe haber otros externos que puede conectar simplemente mediante usb o algo así ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top