2016-11-28 5 views
1

응용 프로그램에서 충돌이 발생할 때까지 메모리를 계속 사용하는 작업이 있습니다. processExplorer을 살펴보면 다음 함수가 호출 될 때마다 약 50MB가 할당된다는 것을 알았습니다 (30 번 호출). 이 메모리는 GarbageCollect를 호출하더라도 함수가 종료 될 때 해제되지 않습니다. 같은 전화 기능 참고 :powerbuilder 메모리가 해제되지 않았습니다.

Of_IsOrario, Of_GetCell, Of_GetRowCount, Of_GetColCOunt 

그냥 값을 반환 (할당되지 메모리)

long ll_file, i, j, ll_bytes, ll_fileWithTitles 
double ld_value 
string ls_line 
n_cst_string str 



ll_fileWithTitles = FileOpen(as_fileName + "text.txt", LineMode!, Write!, Shared!, Replace!, EncodingAnsi!) 
ll_file = FileOpen(as_fileName, LineMode!, Write!, Shared!, Replace!, EncodingAnsi!) 

if ll_file < 0 then 
     MessageBox("Σφάλμα", "Could not create file " + as_fileName) 
     return false 
end if 

for i = 1 to Of_GetColCount() 
     if in_tasks[i].Of_IsOrario() then 
       ls_line += "~tO" + in_Tasks[i].is_symbol 
     else 
       ls_line += "~t" + in_Tasks[i].is_symbol 
     end if     
next 
FileWrite(ll_fileWithTitles, ls_line) 

for i = 1 to Of_GetRowCount() 
     ls_line = "" 
     for j = 1 to Of_GetColCount() 
       ld_value = -Of_GetCell(i, j) 

       if ls_line <> "" then ls_line += "~t" 
       ls_line += string(ld_value) 
     next 
     ls_line = str.Of_GlobalReplace(ls_line, ",", ".") 
     if IsNull(ls_line) then 
       ls_line = ls_line 
     end if 
     ll_bytes = FileWrite(ll_file, ls_line) 
     ls_line = string(in_matrix[i].il_agentId) + "~t" + ls_line 
     ll_bytes = FileWrite(ll_fileWithTitles, ls_line) 
next 

FileClose(ll_file) 
FileClose(ll_fileWithTitles) 

return true 
+0

파워 빌더 버전 :

[...]

은 또한 다음을 추가 그것? –

+0

왜 'if IsNull (ls_line) then ls_line = ls_line ...'구조를 가지고 있습니까? 그것은 무엇이든 바뀌 었습니까? 나는'ls_line = ""' –

답변

0

나는 ISNULL을 (파워 빌더의 버전이 무엇인지 알고 있지만, 대체하지 않습니다)

CR # 304251 PB 기업용 언어 - 런타임 8.0.3 배열이 아닌 모든 blob 의 UpperBound 및 큰 BLOB의 IsNull 함수가 메모리를 누설하고 있습니다 ( ). 함수는 모든 변수에서이를 수행 할 때 유출됩니다. 이것은 버그이지만 8.0.3 패치에서는 수정할 수 없습니다. 해결 방법은 이므로 실제 데이터 유형 변수를 사용하십시오.

CR # 279144 PB 엔터프라이즈 DW - 런타임 8.0.1 점 표기의 IsNull을 데이터 윈도우 열 데이터에 메모리 누수가 있습니다.

CR # 217105 PB 기업 창 - ISNULL은 모든 데이터 유형을 사용하는 경우 응용 프로그램이 개발 또는 런타임 (P 코드와 기계 코드)에서 실행 중일 때 을 런타임 7.0.2 메모리 사용량이 올라갑니다.

Yield() 
GarbageCollect() 
관련 문제