Написать файл надо оптимизировать для интенсивного трафика часть 3

этот вопрос является продолжением первой части 2, любой, кому интересно узнать, откуда я родом, может обратиться к части 1 и части 2, но в этом нет необходимости.

запись файла надо оптимизировать для интенсивного трафика

Написать файл надо оптимизировать для интенсивного трафика часть 2

теперь у меня есть рабочий фрагмент, соответствующая часть ниже:

    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();
        }

приведенный выше фрагмент работает нормально и без ошибок. он выводит около 8 КБ данных при каждой записи.

Теперь я пытаюсь выполнить многопоточность вышеупомянутого кода, чтобы повысить производительность узкого места записи ввода-вывода, и возникли проблемы. Ниже приведен фрагмент, который я пытался сделать.

В основном у меня есть 2 идентичных memoryStream, если, скажем, ms1 заполнена, он записывает ms1 в файл и переключается на ms2, пока ms1 пишет, и наоборот.

    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;

                }
            }
        }

приведенный выше код может компилироваться и выполняться, однако выходная запись не всегда составляет 8 КБ, и запись выполняется слишком часто (по сравнению с моей однопоточной программой). Может кто-то просветить меня и указать, что не так с моей программой? большое спасибо вам

Ответы на вопрос(1)

Ваш ответ на вопрос