управление памятью c # и соединения - PullRequest
0 голосов
/ 28 мая 2019

У нас есть этот код, чтобы узнать ip и mac устройства linux, которое запускает программное обеспечение через службу mdns (avahi), сгенерированную в untity3d с помощью вызова команды оболочки avahi-browse.
Itработает хорошо, но мы считаем, что, когда соединение теряется при публикации avahi (mdns) или напрямую, тратит много времени, не обнаруживая публикацию mdns.
У нас есть некоторый тип утечки памяти, из-за многихсгенерированные сокеты, так как приложение перестает подключаться и получать новый ip при его изменении из-за dhcp.

Могу ли я проверить, есть ли в этом коде проблема, которую мы не обнаруживаем?Спасибо

public static void GetIPAndPortThoughAvahi()
    {
        Debug.Log("MDNS Search for Server IP...");

        //Avahi zeroconf, request ip service & port
        System.Diagnostics.Process getIPAndPort = new System.Diagnostics.Process();
        getIPAndPort.StartInfo.Arguments = "-d local " + avahiID + " --resolve -t -p";
        getIPAndPort.StartInfo.FileName = "/usr/bin/avahi-browse";
        getIPAndPort.StartInfo.RedirectStandardOutput = true;
        getIPAndPort.StartInfo.CreateNoWindow = true;
        getIPAndPort.StartInfo.UseShellExecute = false;
        getIPAndPort.Start();
        getIPAndPort.WaitForExit();
        string output = getIPAndPort.StandardOutput.ReadToEnd();

        string[] outputLines = output.Split('\n');
        print("=========================" + output);
        print(outputLines.Length);
        bool any_found = false;
        foreach (string s in outputLines)
        {
            print(s);
            if (!string.IsNullOrEmpty(s) && s.StartsWith("="))
            {
                string[] fields = s.Split(';');
                print(fields.Length.ToString());
                if (fields.Length > 8)
                {
                    print(fields[7]);
                    print(fields[8]);
                    IPAddress ip;
                    int port;
                    if (IPAddress.TryParse(fields[7], out ip))
                        SetValue(ConfigItem.IP_SERVER, fields[7]);
                    if (int.TryParse(fields[8], out port))
                    {
                        if (port == 0)
                            SetValue(ConfigItem.SERVER_PORT, "8883");
                        else
                            SetValue(ConfigItem.SERVER_PORT, fields[8]);
                    }

                    any_found = true;
                    Debug.Log(string.Format("MDNS - Server IP found at {0}:{1}", fields[7], fields[8]));

                    // Stop searching when first Server service is found
                    break;
                }
            }
        }

        if (!any_found)
            Debug.Log("MDNS - None Server IP service found");

        getIPAndPort.Close();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...