Передача массива через анонимные каналы - C#

Узнай цену своей работы

Формулировка задачи:

Ребята, задача: передать массив из миллиона элементов от канала сервера каналу клиенту. Использовать анонимные каналы и метод синхронизации lock. Написал программу, но она передает массив размерностью не более 1300 элементов (примерно). Пожалуйста, подскажите, что делать.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.IO.Pipes;
 
namespace MultiThread
{
    class Program
    {
        static object Locker = new object();
        static public Stream outStream;
        static public Stream inStream;
        public static AnonymousPipeServerStream pipeServer;
        public static AnonymousPipeClientStream pipeClient;
        static public string pipeHandle = "";
        static public int n = 0;
      
        public static void channelOut()
        {
 
            lock (Locker)
            {
                pipeServer = new AnonymousPipeServerStream(PipeDirection.Out);
                outStream = pipeServer;
                pipeHandle = pipeServer.GetClientHandleAsString();
                StreamWriter writer = new StreamWriter(outStream);
                int[] array;
                
                Console.WriteLine("Введите размерность массива ");
                n = Convert.ToInt32(Console.ReadLine());
                array = new int[n];
                Random rnd = new Random();
                
                for (int i = 0; i < n; i++)
                {
                    array[i] = (1 + rnd.Next(10));
                    //Console.Write("{0}|", array[i]);
                }
                
                for (int i = 0; i < n; i++)
                {
                    writer.WriteLine(array[i]);
                }
                writer.Close();
           }
        }
 
        private static void channelIn()
        {
            Thread.Sleep(1000);
            lock (Locker)
            {
                pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeHandle);
                inStream = pipeClient;
                StreamReader Reader = new StreamReader(pipeClient);
                int[] mas3 = new int[n];
                Console.WriteLine("");
                for (int i = 0; i < n; i++)
                {
                    mas3[i] = Convert.ToInt32(Reader.ReadLine());
                    Console.Write("{0}|", mas3[i]);
                }
                Reader.Close();   
            }
        }
 
        public static void Main()
        {
            Thread th1 = new Thread(() => channelOut());
            Thread th2 = new Thread(() => channelIn());
            th1.Start();
            th2.Start();
            th1.Join();
            th2.Join();
            Console.ReadLine();
        }
    }
}

Решение задачи: «Передача массива через анонимные каналы»

textual
Листинг программы
pipeServer = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable, 1000000000);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы