2012-04-18 60 views
6

Necesito urgentemente un generador de archivos aleatorio que genere archivos dummy verdaderamente aleatorios e incompresibles.Generador de archivos aleatorios (otra vez!)

Terminé con este código delphi. Se trabaja , pero es muy lenta dolorosamente

var 
    Buf  : Integer; 
    TheFile : TFileStream; 
begin 
     TheFile := TFileStream.Create(FileName, fmCreate OR fmOpenReadWrite); 
     with TheFile do 
     begin 
      for i := 0 to FileSize do // Iterate 
      begin 
       Buf := Random(999999) * i; 
       WriteBuffer(Buf, SizeOf(Buf)); 
      end; // for 
     end; // with 
end, 

Mi pregunta es: ¿Hay un generador rápido aleatoria de archivos que puedo usar? el código y/o comandos herramientas de Delphi son aceptables siempre y cuando:

  1. que se puede ejecutar en Windows sin intervención manual (I necesitan esto para mis pruebas, no se permite ninguna intervención)
  2. Se es rápida
  3. archivos generados es no compresible (es decir. la compresión de los resultados de archivos generados en ningún ahorro de espacio)

EDITAR Para los interesados, que aplica los consejos que he recibido aquí y made this function, es lo suficientemente rápido & 7zip tiene dificultades para comprimir los datos generados.

+0

Perfile su código y descubra dónde está gastando más tiempo. – japreiss

+0

Probablemente esté mejor usando CryptoAPI llenando un búfer que se usa para escribir en el archivo. Hay un código C - http://msdn.microsoft.com/en-us/library/aa382048.aspx que es un buen punto de partida – Petesh

+0

¿Qué tipo es Buf? ¿De qué tipo soy? ¿La terminación debe ser 'FileSize-1'? –

Respuesta

9

Utilice un búfer de 4096 bytes de tamaño de página o de varias páginas. Escribir un número entero a la vez será lento.

+0

De acuerdo. El problema aquí es I/O. –

+5

@ChrisThornton De hecho, no será la E/S el cuello de botella, sino la sobrecarga de llamar a 'WriteFile'. El sistema operativo tendrá una capa de almacenamiento en búfer. –

1

Puedes usar mi script generate_random_file.py (Python 3) que utilicé para generar datos de prueba en un proyecto mío.

  • Funciona tanto en Linux como en Windows.
  • Es muy rápido, porque usa os.urandom() para generar los datos aleatorios en trozos de 256 KiB en lugar de generar y escribir cada byte por separado.
+0

@Will: ¿Cómo te atreves a llamarlo spam? Sí, publiqué esta respuesta en 3 preguntas relacionadas, pero esto generalmente se considera aceptable (http://meta.stackexchange.com/questions/17455/is-it-ok-that-i-just-posted-my -las-mismas-respuestas-a-varias-preguntas-relacionadas). Si quieres que mejore mi respuesta, entonces dime por qué. Simplemente eliminarlo es una mala práctica. – robert

Cuestiones relacionadas