QString :: split 함수를 사용할 때 performace가 느려집니다.

암페어

최대 5*10^62D 포인트 를 포함 할 수있는 텍스트 파일이 있습니다 .

이 파일을 읽는 코드를 측정하고 실험 한 후 병목 현상 QString::split이 다음과 같은 기능을 사용하여 읽기 줄을 부분으로 나누는 곳이라는 것을 알았습니다 .

QString x, y; QStringList lineParts;   
while (!inputSream.atEnd())
{
    line = inputSream.readLine();
    if (line.size() > 0)
    {
        if (! line.contains("#"))
        {
        >>  lineParts = line.split(' ', QString::SkipEmptyParts);  //  performance go down by a almost ~2 seconds

            x = lineParts.at(0);
            y = lineParts.at(1);

            QPointF p;
            qreal yd = y.toDouble();
            p.setX(x.toDouble());
            p.setY(yd);

            if (yd < yRanges.first)
                yRanges.first = yd;      //  minY

            if (yd > yRanges.second)
                yRanges.second = yd;     //  maxY

            points.push_back(p);

        } else
        {
            headers.push_back(line);
        }
    }
}

이 기능이 없으면 파일을 거의 2 배 빠르게 읽습니다.

QString분할이 그렇게 느리게 작동합니까?

자신의 분할 함수를 작성하지 않고이 작업의 성능을 향상시키기 위해 무엇을 할 수 있습니까?

추신

나는 전체 파일 읽기를 2 개의 스레드로 분리하려고 생각하고 있었는데, 그중 하나는 라인을 버퍼로 읽고 포인트로 다른 작업을 수행하는 해당 슬롯에 대한 파일 읽기 완료 신호를 방출합니다.

그러나 이것은 나에게 약간의 오버 헤드와 성능 이득이없는 것처럼 들리는데, 그것이 여전히 동기 연산을하는 것만 큼 다르지 않을 것이기 때문입니다 : "라인이 읽히지 않는 동안 그것을 파싱 할 수 없습니다"따라서 나는 더 나은 것이라고 생각합니다 문자열을 더 빨리 분할하려면

파반 찬다 카

Qt5.4 이상을 사용하는 경우

" QString::splitRef"를 사용하십시오 . 이것은 더 빠를 것입니다.

split반환의 목록에서 하위 문자열의 복사본 Qstring.This 메모리 할당의 추가 부담이있다.

splitRef벡터에 대한 반환, 하위 문자열 참조 (데이터 사본 만 해당) QStringRef. 이렇게하면 참조 만 반환되므로 메모리 할당 부담을 피할 수 있습니다.

문서에 " 이 클래스 (QStringRef)는 기존 QString 인스턴스에서 얻은 하위 문자열을 조작 할 때 하위 문자열 처리 성능을 향상 시키도록 설계되었습니다. QStringRef는 단순히 원래 문자열의 일부를 참조하여 표준 QString의 메모리 할당 및 참조 계산 오버 헤드를 방지합니다. . "

http://doc.qt.io/qt-5/qstringref.html#details

참고 : 원래 문자열의 수명이나 범위에주의해야합니다. " 이 문자열이 살아있는 한 모든 참조는 유효합니다.이 문자열을 삭제하면 모든 참조가 매달려있는 포인터가 됩니다." http://doc.qt.io/qt-5/qstring.html#splitRef

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ctypes를 통해 파이썬에서 사용되는 C 함수는 if 조건을 추가 할 때 느려집니다.

분류에서Dev

사용자 지정 컨테이너에서 이진 검색을 수행하는 2-4 스레드를 전달할 때 openMP 속도가 느려집니다.

분류에서Dev

다운로드 할 때 내 PC 속도가 느려집니다.

분류에서Dev

무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

분류에서Dev

무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

분류에서Dev

$ AddUnixListenSocket을 사용할 때 원격으로 데이터를 보내는 rsyslog가 느려 집니까?

분류에서Dev

angularJS에서 split ()을 사용할 때 입력을 편집 할 수 없습니다.

분류에서Dev

left () 함수를 사용할 때 SQL CASE가 실패합니다.

분류에서Dev

Groovy 스크립트에 외부 파일을 사용할 때 JMeter가 느려집니다.

분류에서Dev

ScrollableResultSet.next ()는 스크롤하는 동안 Session.save ()를 사용할 때 점차 느려집니다.

분류에서Dev

집계 함수를 사용할 때 CASE가있는 SELECT가 실패 함

분류에서Dev

Getter를 사용할 때 UnsafeMutableBufferPointer가 느립니다.

분류에서Dev

변수를 사용할 때마다 PHP 함수가 호출됩니까?

분류에서Dev

루프를 통해 반환 할 때 Python 셀레늄이 느려집니다.

분류에서Dev

파일을 복사 할 때 "자세히"를 설정하면 복사 속도가 느려 집니까?

분류에서Dev

파일을 복사 할 때 "자세히"를 설정하면 복사 속도가 느려 집니까?

분류에서Dev

Uncaught TypeError : Object (...)는 Angular Google지도를 사용할 때 함수가 아닙니다.

분류에서Dev

"vuex-orm-decorators"를 사용할 때 "TypeError : this.types는 함수가 아닙니다."

분류에서Dev

함수를 사용할 때 목록 요소가 분리되지 않습니다.

분류에서Dev

TypeError : Object (...)는 react-toastify를 사용할 때 함수가 아닙니다.

분류에서Dev

react-navigation v5를 사용할 때 renderIcon은 함수가 아닙니다.

분류에서Dev

.then 함수를 사용할 때 페이지가로드되지 않습니다.

분류에서Dev

.SaveAs VBA 함수를 사용하려고 할 때 메서드 오류가 발생합니다.

분류에서Dev

클래스에서 여러 함수를 사용하려고 할 때 Python 오류가 발생합니다. Tkinter

분류에서Dev

무언가에 연결하려고 할 때 Word의 시작 속도가 느려집니다.

분류에서Dev

무언가에 연결하려고 할 때 Word의 시작 속도가 느려집니다.

분류에서Dev

Order By를 사용할 때 MySQL 쿼리가 매우 느려짐

분류에서Dev

JQUERY를 사용하려고 할 때 문제가 있습니다.

분류에서Dev

Django : Django 모델 또는 함수를 사용할 때 가져올 때 Celery에서 오류가 발생합니다.

Related 관련 기사

  1. 1

    ctypes를 통해 파이썬에서 사용되는 C 함수는 if 조건을 추가 할 때 느려집니다.

  2. 2

    사용자 지정 컨테이너에서 이진 검색을 수행하는 2-4 스레드를 전달할 때 openMP 속도가 느려집니다.

  3. 3

    다운로드 할 때 내 PC 속도가 느려집니다.

  4. 4

    무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

  5. 5

    무언가를 업로드 할 때마다 인터넷 속도가 매우 느려집니다. 어떡해?

  6. 6

    $ AddUnixListenSocket을 사용할 때 원격으로 데이터를 보내는 rsyslog가 느려 집니까?

  7. 7

    angularJS에서 split ()을 사용할 때 입력을 편집 할 수 없습니다.

  8. 8

    left () 함수를 사용할 때 SQL CASE가 실패합니다.

  9. 9

    Groovy 스크립트에 외부 파일을 사용할 때 JMeter가 느려집니다.

  10. 10

    ScrollableResultSet.next ()는 스크롤하는 동안 Session.save ()를 사용할 때 점차 느려집니다.

  11. 11

    집계 함수를 사용할 때 CASE가있는 SELECT가 실패 함

  12. 12

    Getter를 사용할 때 UnsafeMutableBufferPointer가 느립니다.

  13. 13

    변수를 사용할 때마다 PHP 함수가 호출됩니까?

  14. 14

    루프를 통해 반환 할 때 Python 셀레늄이 느려집니다.

  15. 15

    파일을 복사 할 때 "자세히"를 설정하면 복사 속도가 느려 집니까?

  16. 16

    파일을 복사 할 때 "자세히"를 설정하면 복사 속도가 느려 집니까?

  17. 17

    Uncaught TypeError : Object (...)는 Angular Google지도를 사용할 때 함수가 아닙니다.

  18. 18

    "vuex-orm-decorators"를 사용할 때 "TypeError : this.types는 함수가 아닙니다."

  19. 19

    함수를 사용할 때 목록 요소가 분리되지 않습니다.

  20. 20

    TypeError : Object (...)는 react-toastify를 사용할 때 함수가 아닙니다.

  21. 21

    react-navigation v5를 사용할 때 renderIcon은 함수가 아닙니다.

  22. 22

    .then 함수를 사용할 때 페이지가로드되지 않습니다.

  23. 23

    .SaveAs VBA 함수를 사용하려고 할 때 메서드 오류가 발생합니다.

  24. 24

    클래스에서 여러 함수를 사용하려고 할 때 Python 오류가 발생합니다. Tkinter

  25. 25

    무언가에 연결하려고 할 때 Word의 시작 속도가 느려집니다.

  26. 26

    무언가에 연결하려고 할 때 Word의 시작 속도가 느려집니다.

  27. 27

    Order By를 사용할 때 MySQL 쿼리가 매우 느려짐

  28. 28

    JQUERY를 사용하려고 할 때 문제가 있습니다.

  29. 29

    Django : Django 모델 또는 함수를 사용할 때 가져올 때 Celery에서 오류가 발생합니다.

뜨겁다태그

보관