2011-03-16 4 views
5

C#에서 여러 줄 텍스트 상자를 사용하여 일부 추적 정보 만 기록합니다. 나는 라인을 추가해야하기 때문에 간단히 AppendText("text-goes-here\r\n")을 사용한다.C# multiline textbox 메모리 사용 문제

나는이 프로그램을 며칠 동안 (많은 활성 트레이스로) 실행시키고 많은 메모리를 사용하고있는 것으로 나타났습니다. 간단히 말해, maxlength 값이 매우 작은 것 (256)이라 할지라도 텍스트 상자의 내용 만 계속 확장됩니다.

FIFO (maxlength 크기를 초과하는 가장 오래된 텍스트를 버리기)처럼 작동한다고 생각했습니다. 그것은, 단지 크기가 계속 증가하지 않습니다. 이것은 분명히 내 기억 낭비의 원인입니다. 아무도 내가 뭘 잘못하고 있는지 알아?


이 추가 된 몇 시간 초기 질문 후 ... 좋아, 나는 아래에 제안 된 코드를 시도했다. 신속하게 테스트하려면, 단순히 타이머를 앱에 추가하고 타이머 틱에서 아래 코드와 기본적으로 동일한 메소드를 호출합니다. 틱 속도가 높기 때문에 프로세스의 메모리 사용을 관찰하고 누수가 있는지 신속하게 확인할 수 있습니다. 없었다. 그거 좋았어; 그러나, 나는 이것을 응용 프로그램에 넣었고 메모리 사용량은 변경되지 않았습니다 (여전히 누설 됨). 확실하게 내가 누수가있는 것을 암시하는 것처럼 보인다 :-(하지만, 단순히 그 메소드의 최상단에 리턴을 추가하면, 사용량이 안정으로 떨어진다.) 이것에 대한 생각? 타이머 틱에서 호출 된 코드는 메모리를 축적하지는 않지만 실제 코드 (동일한 메서드)는 않습니다. 차이점은 실제 코드의 다양한 위치에서 메서드를 호출한다는 것입니다. 호출의 컨텍스트가 어떻게 든이 코드에 영향을 미칠 수 있습니까? (참고, isn 이미 명확한, 나는 어떤 방법으로 .NET 전문가가 아니야).

+0

텍스트 상자를 사용하여 데이터베이스에 기록하거나 이벤트 로그에 기록하지 않는 이유가 있습니까? – Thyamine

+0

다중 행 텍스트 상자가 클라이언트 측에서 TEXTAREA HTML 컨트롤로 렌더링되므로 maxlength와 같은 속성을 쉽게 무시하는 ASP.NET의 일반적인 문제입니다. 나는 이것이 winforms라고 생각 하나? – MusiGenesis

+0

Thyamine .. 이유는 단순입니다. 나는 단지 프로그램의 런타임 트레이스를 볼 수 있기를 원한다. AppendText()가 FIFO처럼 작동하기를 바랬습니다. –

답변

2

TextBox를 사용하면 MaxLength 값에 관계없이 텍스트를 추가 할 수 있으며 사용자 항목을 제어하는 ​​데만 사용됩니다. maxlength에 도달하지 않았 음을 확인한 후 새 텍스트를 추가 할 것이며, 그럴 경우 처음부터 x 줄만 제거하십시오.

+0

방금 ​​테스트했습니다. TextBox의 기본 문자열 속성은 maxLength 속성에 관계없이 전체 문자열을 반환합니다. –

+0

이것은 나를 깜짝 놀라게합니다. 나는 크기로 maxlength를 사용하여 AppendText를 FIFO 모드로 전환 할 수있는 방법이 있어야한다고 생각했습니다. –

+0

@Ed - 확실한 방법이 있습니다 - 내가 제안한 것과 @ Varun Chatterji가 그의 대답에서 구현했습니다 :) 그러나 그렇게하는 방식으로 구축 된 것은 없습니다. – Andrey

2

You c ould는 텍스트를 추가하는 간단한 함수를 사용합니다 :

int maxLength = 256; 
private void AppendText(string text) 
{ 
    textBox1.AppendText(text); 
    if(textBox1.Text.Length > maxLength) 
     textBox1.Text = textBox1.Text.Substring(textBox1.Text.Length - maxLength); 
} 
+0

이것은 작동하지만, 특히 maxLength에 도달 할 때마다 아래쪽으로 스크롤 할 텍스트 상자가 필요하다는 사실을 추가 할 때 많은 작업과 같이 보인다. 감사! 그러나 더 좋은 방법이 있기를 바랬습니다. –

+0

이 게시물의 맨 위에 추가 된 텍스트를 참조하십시오 .... –