2011-09-07 8 views
8

la documentación para NSDataReadingOptions Estado:¿Cómo saber si un archivo está "almacenada en la caché del sistema de archivos"

NSDataReadingUncached

Una pista que indica que el archivo no se debe almacenar en el sistema de archivos cachés Para los datos que se leen una vez y se descartan, esta opción puede mejorar el rendimiento.

Eso tiene sentido. Tengo curiosidad si hay una manera de saber si un archivo ya residía en los cachés de archivos-sysem.

Por ejemplo, si necesito realizar una gran cantidad de lectura de archivos, podría tener sentido priorizar la lectura de archivos que ya residen en la memoria caché.

+1

¿Cuál es la idea detrás de las prioridades? Necesita leer 100 archivos, 10 se almacenan en caché con 1s de tiempo de lectura, 90 sin almacenar en caché y 2 segundos de tiempo de lectura. Siempre sabrá que se necesitan 190 segundos para leerlos todos, sin importar el orden de lectura. –

+2

Ah, pero si primero leo los que no están en la memoria caché, desalojando a los otros del caché, todas las lecturas terminan sin guardar en memoria caché, tomando 200 en total –

Respuesta

4

Me temo que aquí podemos transmitir solo algunas suposiciones ya que no hay documentación oficial disponible sobre esto.

  • Se supone que el sistema de archivos del IOS para ser jerárquica del sistema de archivos (HFS) el mismo que uno de OS-X (ver iOS filesystem HFS?)
  • HFS utiliza Unified Buffer Cache (UBC)
  • cachés UBC los datos del archivo en trozos en lugar de todo el archivo - este es el primer punto, incluso si parte del archivo se almacena en caché no se puede saber si todo el archivo se almacena en caché
  • no hay ninguna API o comandos del kernel para controlar los contenidos de UBC (por lo que esto responde a su pregunta wi TH NO).

Algunos enlaces interesantes para leer:

  • Testing the UBC
  • Este tipo trató de get some info sobre el contenido de la UBC en virtud iPhone (jailbreaked)
  • El único control sobre el sistema de archivos de caché se menciona en el documentation es la misma bandera que también encontraste.

Su opción de asegurar que un archivo puede tener acceso rápido es mapear el archivo en una página de la memoria virtual como se describe en el mismo documento de Apple.

+0

Lo siento por las etiquetas confusas que alguien agregó, estoy interesado en esto por todas las plataformas Cocoa, no solo iOS. Me imagino que se comportan igual en este caso, ya que los sistemas de archivos son básicamente los mismos. –

+0

Entonces, cuando dice que no hay API para * controlar * los contenidos del UBC, ¿está incluyendo algún tipo de inspección como parte de ese derecho? es decir, no quiero editar el caché de ninguna manera, simplemente encontrar algo de información sobre él; y tampoco hay API para eso, ¿verdad? –

+0

Respondí desde el punto de vista de iOS. Bajo ese sistema operativo, seguramente no hay API públicas para recopilar más información sobre el caché. Recopilé toda la información disponible públicamente que no está bajo NDA. – MrTJ

Cuestiones relacionadas