2011-02-02 11 views
1

필자는 Delphi 7 (Indy를 사용하는 ModBus 구성 요소 포함)에 프로그램을 작성했습니다. 내 컴퓨터에서 Indy 9를 사용하고 잘 작동합니다. ModBus 프로토콜을 통해 다른 컴퓨터와 잘 통신합니다. 그러나 프로그램이 다른 컴퓨터에서 실행될 때 CPU 90-100 %로드가 발생합니다. 불행히도이 기계는 내 사무실에있는 것이 아니라 "세계의 다른 쪽"에 있습니다. 이 기계가 인디 9 또는 인디 10을 사용하고 있는지 어떻게 알 수 있습니까? 그리고 더 나아가, 그것이 Indy 10을 돌리고 있다면, 그것은 문제가 될 수 있습니까? 아니면 매우 희박할까요?Indy 9를 사용하기 위해 필자가 작성한 프로그램을 고객 사이트에서 Indy 10을 사용할 수 있습니까?

+0

배포 된 실행 파일에 대해 이야기하고 있습니까? 모든 것을 실행 파일로 컴파일하지 않습니까? –

+0

예, 런타임 패키지를 사용하더라도 컴파일 할 때와 동일한 인디 버전이어야합니다. –

답변

1

높은 CPU로드를 유발하는 원인을 찾으려면 AQTime 또는 SamplingProfiler과 같은 프로파일 러를 사용해보십시오.

이렇게하면 대부분의 시간 동안 실행되는 방법을 얻을 수 있습니다. 그러면 문제의 원인을 찾을 수 있습니다.

또는 응용 프로그램에 일부 로깅을 추가 할 수 있습니다.

4

확실한 대답은 심지어 패키지를 사용하는 경우, 그것은 실행 인디 9을 사용하여야한다, 아니

당신이 인디 9로 프로그램을 컴파일하는 경우 입니다. AFAIK, INDY 9를 사용하여 실행 파일을 컴파일하고 런타임시 INDY 10을 사용하는 방법은 없습니다. 원하는 경우에도 우연히 발생하지는 않습니다.

1

연결 원인 열기/닫기와 같은 일련의 동작을 거치는 테스트 응용 프로그램을 준비 할 수 있습니다. 계속 진행하기 전에 사용자에게 확인을 요청하면 ("계속 하시겠습니까? y/n"), 사용자는 모든 단계에서 CPU로드를 확인하여 중요한 작업을 감지 할 수 있습니다.

0

답변 해 주셔서 감사합니다. 나는 이것이 인디 문제라고 생각하지 않는다. 쿼드 CPU PC에서 CPU로드 또한 1-2 %에서 aprox로 증가합니다. 25 %. 이것은 회선을 열린 상태로 유지하면 발생합니다. 그러나 ModBus 클라이언트 측의 폴링마다마다 ModBus 서버를 분리하고 PC를 다시 연결하게하면 CPU로드가 항상 낮습니다. 뭐가 정상입니까? 모든 시간에 회선을 열거 나 모든 폴링을 연결하고 연결을 끊으시겠습니까? 폴링 주파수는 다음과 같습니다 : 유휴 모드 : 2000ms, 활성 모드 500ms.

+0

쿼드 코어에서 25 % CPU = 코어 중 하나의 100 % –

+0

플러스 : 질문에 사용 된 계정으로 로그인 한 경우 자신의 질문에 대한 답변을 추가하는 대신 해당 답변을 편집했을 수 있습니다 또는 어쩌면 당신은, 그리고 방금 레이블을 변경?). 어떤 경우 든 StackOverflow를 사용하면 질문과 대답의 긴 스레드를 피하기 위해 특별히 편집 할 수 있습니다. –

0

로그를 추가해야 무슨 일이 일어나는지 알 수 있습니다.

문제 자체가 연결 자체입니까? 또는 연결되어있는 동안 수행되는 작업입니까?

로그를 좁히면 사용자가 배가 고픈 프로세서를 줄이기 위해 코드를 변경할 수 있습니다.

AQTime 또는 SamplingProfiler를 사용하면 앞에서 설명한 것과 마찬가지로 도움이됩니다.

개인적으로 항상 모든 응용 프로그램에 기본적으로 로깅을 추가합니다. 일단 사이트에서 소프트웨어가 무엇을 바꿀지 모르고 단순히 로그를 켜면 시간을 많이 절약 할 수 있습니다.

관련 문제