Domanda

Voglio assicurarmi che la mia applicazione non abbia alcun blocco dell'interfaccia utente quando si lavora su file su filesystem lenti (ad es. in rete, CD / DVD o HDD spun-down).

Sto usando direttamente le operazioni del filesystem Cocoa. Temo che sarebbe troppo faticoso deridere o sottrarre tutto ciò solo per i test, e inoltre ci potrebbero essere modi non ovvi in ??cui il mio programma tocca il filesystem.

Ho provato a utilizzare le unità di rete per i test, ma la memorizzazione nella cache del sistema operativo rende i test non ripetibili e ... troppo veloci :)

Esiste qualcosa come il filesystem MacFuse deliberatamente lento? Qualche altro metodo che mi permettesse di trovare tutti i singhiozzi dell'interfaccia utente e le condizioni di gara causati da ritardi imprevisti?

È stato utile?

Soluzione

La risposta più semplice è MacFUSE come notato altrove; è abbastanza facile da simulare. Potresti anche provare a montare una condivisione su NFS e quindi utilizzare il bit throttling usando ipfw integrato, come:

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

o se stai usando WebDAV

ipfw aggiungi 1 pipe 1 src-port 80

Questo quindi gocciolerà le richieste a qualsiasi livello di pipe definito. Dovresti essere in grado di liberartene di nuovo in seguito con:

ipfw delete 1

Altri suggerimenti

Forse acquistare una chiavetta USB lenta? Ne ho trovati alcuni a Best Buy che erano glaciali. Collegali attraverso diversi hub USB e forse anche una tastiera, in modo che abbiano una connessione molto complessa.

-W

Scrivere un filesystem MacFUSE con il loro framework Cocoa è semplicissimo. In effetti penso che ci sia anche un sistema di esempio incluso che rispecchia solo il filesystem locale. Perché non adattare rapidamente quel codice in modo che chiami sleep () per un momento durante ogni operazione?

A seconda di dove ti preoccupi di avere problemi, il mio primo pensiero sarebbe quello di includere solo un ulteriore livello di chiamate di funzione tra l'app e il file I / O, e in quel livello creare alcune chiamate sleep (). Cioè, qualunque sia la lingua che stai usando, sostituisci il " leggi " chiama con " readDelegate " ;, e lascia readDelegate in pausa per un determinato periodo di tempo, quindi esegui la lettura reale e restituisci il valore. Quando sei pronto per andare in produzione, non dovresti nemmeno estrarre il livello aggiuntivo, basta rimuovere il sonno.

Che ne dici di un'unità floppy? Ci devono essere quelli esterni che puoi semplicemente connettere via USB o giù di lì ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top