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)