【问题标题】:Android Socket - Memory Leak - Incoming messageAndroid Socket - 内存泄漏 - 传入消息
【发布时间】:2013-12-11 10:43:02
【问题描述】:

这里的第一个问题,我希望你能帮助我:)

代码(如下)是不久前编写的一些代码,用于侦听打开的套接字上的传入数据包。该代码运行良好并设法监听所有传入的消息,但是问题似乎出在下面的这个函数上。这段代码似乎一直在运行,这导致它使用了大量的 CPU 资源和大量的 RAM。我无法显示更多代码,因为它有很多。只是想知道是否有更好的方法来知道数据包已经到达。代码如下:

**

{
    if (socket.getInputStream() != null)
    {
        if (socket.getInputStream().available() > 0)
        {
            int i = socket.getInputStream().available();
            byte[] buffer = new byte[Global.c_iRxArraySize];
            socket.getInputStream().read(buffer);

            short[] converted = new short[Global.c_iRxArraySize];
            for (int j = 0; j < i; j++)
            {
                converted[j] = (short) (buffer[j] & 0xff);
            }
            Global.sNoTransmittionRecievedTimeout = 0;

            p_DebugreceivedMessageSize = FindPacketSize(converted);
            p_DebugreceivedMessageCount = p_DebugreceivedMessageCount + 1;
            p_DebugreceivedMessageData = GetPacketContents(converted);

            Date date = new Date();
            SimpleDateFormat p_DebugreceivedMessageTime = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");
            DateReceivedData = p_DebugreceivedMessageTime.format(date);

            List<String> DataListReceived = new ArrayList<String>();
            DataListReceived.add(Arrays.toString(p_DebugreceivedMessageData));

            MobileRxProtocol(converted);
            Global.p_ReconnectionTimer = 0;
        }
    }

【问题讨论】:

  • 如果 N 是缓冲区的大小,InputStreamread 方法不能保证您实际读取了 N 个字节。事实上,它返回了它已设法读取的字节数。这与您的问题无关,但我认为您应该意识到这一点。更多信息:stackoverflow.com/questions/7131421/…

标签: java android performance sockets packet


【解决方案1】:

如果 Global.c_iRxArraySize 是固定大小的,您可以尝试重用缓冲区并转换,也可以尝试重用 SimpleDateFormat,无需为每次调用创建和销毁它,并且 DataListReceived 可以在结束时重用和清理这个过程。

在这个范围之外声明所有这些变量然后重用,我认为这至少是第一步。

【讨论】:

  • 非常感谢,将进行一些更改,并且很可能会删除时间戳,我相信它是出于调试原因添加的,因此可以轻松删除。
猜你喜欢
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-08-13
  • 2011-07-21
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多