Necesidad de escribir el archivo optimizado para tráfico pesado parte 3
Esta pregunta es una continuación de la primera parte 2, cualquiera que esté interesado en ver de dónde vengo puede consultar la parte 1 y la parte 2, pero no es necesario.
Necesidad de escribir el archivo optimizado para tráfico pesado
Necesidad de escribir el archivo optimizado para tráfico pesado parte 2
Ahora tengo un fragmento de trabajo, la parte relevante está abajo:
public static class memoryStreamClass
{
static MemoryStream ms1 = new MemoryStream();
public static void fillBuffer(string outputString)
{
byte[] outputByte = Encoding.ASCII.GetBytes(outputString);
ms1.Write(outputByte, 0, outputByte.Length);
if (ms1.Length > 8100)
{
emptyBuffer(ms1);
ms1.SetLength(0);
ms1.Position = 0;
}
}
static void emptyBuffer(MemoryStream ms)
{
FileStream outStream = new FileStream("c:\\output.txt", FileMode.Append);
ms.WriteTo(outStream);
outStream.Flush();
outStream.Close();
}
El fragmento anterior funciona bien y libre de errores. Salió alrededor de 8KB de datos cada escritura.
ahora trato de multiprocilar el código anterior para mejorar el rendimiento de un cuello de botella de escritura IO y surgieron problemas. el siguiente fragmento es lo que intenté intentar.
Básicamente tengo 2 MemoryStream idénticos, si, por ejemplo, ms1 está lleno, escribe ms1 en el archivo y cambia a ms2 mientras ms1 está escribiendo, y viceversa.
public static class memoryStreamClass
{
static MemoryStream ms1 = new MemoryStream();
static MemoryStream ms2 = new MemoryStream();
static int c = 1;
public static void fillBuffer(string outputString)
{
byte[] outputByte = Encoding.ASCII.GetBytes(outputString);
if (c == 1)
{
ms1.Write(outputByte, 0, outputByte.Length);
if (ms1.Length > 8100)
{
c = 2;
Thread thread1 = new Thread( () => emptyBuffer(ms1));
thread1.Start();
ms1.SetLength(0);
ms1.Position = 0;
}
}
else
{
ms2.Write(outputByte, 0, outputByte.Length);
if (ms2.Length > 8100)
{
c = 1;
Thread thread2 = new Thread(() => emptyBuffer(ms2));
thread2.Start();
ms2.SetLength(0);
ms2.Position = 0;
}
}
}
el código anterior puede compilarse y ejecutarse, sin embargo, la escritura de salida no siempre es de 8 KB, y se escribe con demasiada frecuencia (que mi programa de un solo hilo). ¿Alguien puede iluminar mi y señala qué está mal con mi programa? muchas gracias