2008-11-13 4 views
2

이전 Classic ASP 사이트에서 완벽하게 작동하므로 매우 이상한 문제입니다. 기본적으로 데이터베이스를 쿼리하고 2200 줄 정도의 텍스트를 Response.Write를 통해 텍스트 파일로 내보내 대화 상자에 출력하고 사용자가 파일을 저장할 수 있도록합니다.Response.Write DataTable 데이터를 텍스트 파일로 변환하면 ASP.net이 중단됩니다.

Response.Clear() Response.ClearContent() Response.ClearHeaders()

Dim fileName As String = "TECH" & test & ".txt" 

    Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName)) 
    Response.ContentType = "text/plain" 

    Response.Write(strHeader) 

    Dim sw As New IO.StringWriter() 

    Dim dtRow As DataRow 
    For Each dtRow In dt3.Rows 
     sw.Write(dtRow.Item("RECORD") & vbCrLf) 
    Next 

    Response.Write(sw.ToString) 
    Response.Write(strTrailer & intRecCount) 
    Response.End() 

내가 StringWriter를 사용하거나 단순히 "Response.Write에 (dt.Rows (I) .Item을 (사용할 수 있습니다 RECORD "). toString

어느 쪽이든 우리 개발 사이트에서 Export가 끔찍한 행보를 일으키고 있습니다. 로컬 컴퓨터는 멈추지 않고 거의 즉각적입니다. 레코드 세트는 그리 크지 않고 쓰는 라인은 다음과 같습니다. 작음.

누군가 왜 교수형에 처하는 지 알 수 있습니까? 그것은 저장을 허용하고 파일을 표시하지만 3 ~ 4 분이 넘습니다.

답변

2

원격 디버거를 연결하고 정지 위치를 찾으십니까?

문자열 작성기 루프 또는 실제 쿼리 코드 (여기서는 제공되지 않음)인지 알아야합니다.

0

출력 버퍼가 오버플로되어있는 것 같습니다. 아마도 거기에 카운터를 추가하여 수 백 줄을 흘려 보냅니다.

또한 Response 객체는 기본적으로 StringWriter에 대한 대부분의 작업을 수행합니다. StringWriter를 중개자로 사용하는 것은 아마도 중복됩니다.

+0

Response.Write가 자동으로 버퍼를 플러시하지 않아야합니까? – FlySwat

+0

당신은 그것을 생각할 것입니다, 그러나 나는 그것이 일어나는 것을 보았습니다. 또한 코드를 읽으면 모든 것을 하나의 큰 작업으로 응답하게됩니다. –

0

StringWriter와 DataTable을 모두 사용하면 잔인합니다.

왜 직접 SqlReader를 사용하여 데이터베이스에서 결과를 가져 오지 않고 독자를 읽는 동안 출력 스트림에 직접 쓸 수 있습니까? 훨씬 빨라졌고 메모리 사용량도 훨씬 적습니다.

두 번째 질문에 대한 답변 - ASP가 정상적으로 작동하는 이유는 데이터를 출력하기 위해 동일한 콘텐츠를 메모리에 세 번 저장 한 것입니다 (DataTable, StringWriter 및 출력물에 있음). 완충기). 내 ASP는 약간 녹슬지 만, 나는 당신이 일종의 데이터베이스 리더를 사용하고 있다고 생각할 것이다.

또한 일부 로깅 인프라 (NLog, log4net)를 사용하면 원격 디버거를 연결하는 대신 작업이 얼마만큼 지연되는지에 대한 일부 타이밍을 출력 할 수 있습니다.