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

Respuestas a la pregunta(1)

Su respuesta a la pregunta