Foros del Web » Programación para mayores de 30 ;) » .NET »

Archivos de broma con C#

Estas en el tema de Archivos de broma con C# en el foro de .NET en Foros del Web. Hola: Me ha enviado un archivo en CMD de broma que me llena los PenDrive de 8 GB a tope. En mi caso le quiero ...
  #1 (permalink)  
Antiguo 11/12/2009, 17:43
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Archivos de broma con C#

Hola:

Me ha enviado un archivo en CMD de broma que me llena los PenDrive de 8 GB a tope. En mi caso le quiero devolver la jugada en plan broma y lo único que se me ocurre es esto. Tarda en escribirse, pero él lo hacía más rapido que mi método. ¿Alguien le sale mejor?

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO; // No olvidar desde aquí.

namespace CMD_Serie
{
    class Program
    {
        private const string FILE_NAME = "Archivo.txt";

        static void Main(string[] args)
        {
            if (File.Exists(FILE_NAME))
            {
                Console.WriteLine("{0} ya existe.", FILE_NAME);
                Console.ReadKey();
                return;
            }
            using (StreamWriter sw = File.CreateText(FILE_NAME))
            {
                for (long i = 1; i <= 999999999999999999; i++)
                {
                    Console.WriteLine(i);
                    sw.WriteLine(i);
                    //sw.Close();
                }
            }
        }
    }
}
Saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 11/12/2009, 20:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Archivos de broma con C#

Aunque siendo sincero se me hace ocioso hacer esto involucra que le des una ojeada a algunos temas

viendo tu codigo que se puede optimizar mucho:

1.- haces 9999999999999999999999999999999 veces la escritura pero lo peor de todo es que es sincrona encontes el streamwriter va y viene y hasta q no termine la escritura actual regresa entonces pues desperdicias procesador.

te dejo tu codigo optimizado de cierto modo (no es lo mas optimo pero puedes empezar por ahi)

Código:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics.CodeAnalysis;

namespace CreaArchivo
{
    class Program
    {
        private const string FILE_NAME = "Archivo.txt";
        public static BinaryWriter sw;

        public static void data(IAsyncResult x)
        {
             sw.BaseStream.EndWrite(x);            
        }

        static void Main(string[] args)
        {
            byte [] datos=Encoding.ASCII.GetBytes((new string('A', 45000000)));

            if (File.Exists(FILE_NAME))
            {
                Console.WriteLine("{0} ya existe.", FILE_NAME);
                Console.ReadKey();
                return;
            }
            FileStream fs=new FileStream(FILE_NAME,FileMode.Create);

            sw = new BinaryWriter(fs);
            
                for (long i = 1; i <= 30; i++)  // En lugar de escribir 9999999999999999 pocos bytes
                {                                          // Mejor escribo 45000000 de letras A 30 veces 
                    sw.BaseStream.Flush();
                    sw.BaseStream.BeginWrite(datos,0,datos.Length,new AsyncCallback(data),sw);//sw.Close();                    
                }
                sw.Close();
        }

    }
}
aca funciona con 200 mb de memoria hasta 400 de pico (todavia mas optimizables) y en 30 seg o menos genera 1.2 gb ahora sabras tu que tanto te involucras en la cuestion de modelo asincrono de procesos (que es lo interesante de esto)
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 11/12/2009, 20:45
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 727
Antigüedad: 17 años
Puntos: 8
Respuesta: Archivos de broma con C#

Muchas gracias, funciona muy rápido.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:47.