Какой будет иметь наибольшую стоимость процессора? - PullRequest
1 голос
/ 12 января 2012

У меня есть класс, как таковой:

 private class verifierListener implements SerialPortEventListener {

    String outBuffer;
    char charBuffer;

    public void serialEvent(SerialPortEvent event) {
        if (event.isRXCHAR()) {//If data is available
            timeOut = 1000;
            lastReadTimer = System.currentTimeMillis();
            if (event.getEventValue() > 0) {//Check bytes count in the input buffer

                try {
                     byte[] buffer = verifierPort.readBytes(event.getEventValue());
                     //INSERT CODE HERE
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
        }

С двумя возможными способами реализации (в области INSERT CODE HERE)

Случай A:

                        outBuffer = new String(buffer);


                        bfrFile.print(outBuffer);
                        sysOutWriter.append(outBuffer);

Случай B:

                            for(byte bt : buffer) {
                                charBuffer = (char) bt;
                                bfrFile.print(charBuffer);
                                sysOutWriter.append(charBuffer);
                            }

И скомпилируйте, и запустите, и сделайте то, что они должны делать.Но я стараюсь, чтобы этот код работал как можно более плавно, поэтому я не могу рисковать потерей передаваемых данных на младшем ПК.

Я предполагаю, что у случая А будет больше накладных расходов.из-за инициализации String, но я хотел убедиться, прежде чем удалить его.

Можете ли вы сказать, какой из них будет чище, и / или как определить стоимость обработки для каждого?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Вы не должны терять данные, даже на младшем компьютере.Это связано с тем, что между вашим кодом и фактическими данными, поступающими через последовательный порт, есть (несколько) буферов (буферы операционной системы, буферы Java и т. Д.).По скорости, если вы не выполняете этот код много (например, несколько тысяч раз в секунду), вы не должны заметить разницу.

Предполагая, что это стандартное последовательное соединение, и вы работали со скоростью 115200 бит в секунду, это означает, что вы получаете не более 14 400 символов в секунду.Даже если бы вы читали по одному символу за раз, вы не должны видеть большой удар по скорости.

1 голос
/ 12 января 2012

если вы используете windows ctrl-alt-delete и просматриваете поток при его запуске и видите память, которую он используетЧто касается вашего кода, могу я предложить вам использовать StringBuilder вместо String.Я не уверен, есть ли разница в накладных расходах, но с хорошей точки зрения кода / программирования это должно быть A.

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