Написать файл надо оптимизировать для интенсивного трафика часть 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 КБ, и запись выполняется слишком часто (по сравнению с моей однопоточной программой). Может кто-то просветить меня и указать, что не так с моей программой? большое спасибо вам