नीचे दिया गया कोड एक पूर्ण कोर प्रदर्शन का उपयोग कर रहा है और यह बहुत धीमा है कि इसे समाप्त होने में 10-12 सेकंड लगते हैं, मैं इसे कैसे तेज कर सकता हूं?

NetworkStream networkStream = (NetworkStream)param;
byte[] sendBytes = new byte[1000000];
int current = 0;
int cpos = 0;
for (int i = 0; i < 16; i++)
{
    for (int j = 0; j < 16; j++)
    {
       for (int k = 0; k < 16; k++)
       {
          sendBytes[current] = i;
          current++;
          sendBytes[current] = j;
          current++;
          sendBytes[current] = k;
          current++;
          for (int x = 0; x < 16; x++)
          {
              for (int y = 0; y < 16; y++)
              {
                  for (int z = 0; z < 16; z++)
                  {
                      sendBytes[current] = getItem(x + i * 16, y + j * 16, z + k * 16);
                      current++;
                  }
              }
          }
          //Here it also copies the old bytes and compresses them using zlibstream
          networkStream.Write(sendBytes, 0, current);
          current = 0;
      }
   }
}
byte getItem(int x, int y, int z)
{
   return blockIds[x, y, z];
}

संपादित करें: लापता विधि कोड जोड़ा गया।

0
user10311801 21 फरवरी 2019, 10:45

1 उत्तर

सबसे बढ़िया उत्तर

ध्यान दें कि सहेजी गई चीज़ भेजने में केवल 0.1 सेकंड लगते हैं

मुझे लगता है कि यह NetworkStream.Write विधि के लिए 1 कॉल की अवधि है

लूपबैक में डेटा भेजकर एक साधारण परीक्षण। यह मेरे पीसी पर लगभग 300ms और डेटा भेजे बिना 50ms खर्च करता है। तो जाहिर सी बात है इसका कारण आपके नेटवर्क की स्पीड है।

लूप काफी तेज . है

//Local server
Socket server = new Socket(SocketType.Stream, ProtocolType.Tcp);
Socket peer = null;
server.Bind(new IPEndPoint(IPAddress.Any, 29999));
server.Listen(50);
server.BeginAccept(ar =>
{
    peer = server.EndAccept(ar);
    byte[] buf = new byte[16 * 16 * 16 + 3];
    while (peer.Connected)
        peer.Receive(buf);
},
null);

//Client
Socket client = new Socket(SocketType.Stream, ProtocolType.Tcp);
client.Connect(new IPEndPoint(IPAddress.Loopback, 29999));
var networkStream = new NetworkStream(client);

//Loop
byte[] sendBytes = new byte[16 * 16 * 16 + 3];
int current = 0;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 16; i++)
    for (int j = 0; j < 16; j++)
        for (int k = 0; k < 16; k++)
        {
            sendBytes[current++] = (byte)i;
            sendBytes[current++] = (byte)j;
            sendBytes[current++] = (byte)k;

            for (int x = 0; x < 16; x++)
                for (int y = 0; y < 16; y++)
                    for (int z = 0; z < 16; z++)
                        sendBytes[current++] = getItem(x + i * 16, y + j * 16, z + k * 16);

            networkStream.Write(sendBytes, 0, current);
            current = 0;
        }
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

//Clean works
client.Close();
peer.Close();
server.Close();
0
shingo 21 फरवरी 2019, 09:27