2016-06-22 2 views
0

C# 응용 프로그램은 실행 파일에서 정상적으로 작동하지만 디버그 모드에서는 갑자기 응답이 없으므로 디버그 메뉴를 통해 프로그램을 중지해야합니다.Visual Studio 디버그 모드에서 긴 실행 문을 처리하는 방법은 무엇입니까?

조사한 결과, json에 매우 큰 json 개체가 포함되어 있으면 다음 문을 실행해도 반환되지 않는 것으로 나타났습니다. 우리는 객체 큰 가져올 때, json으로 개체를 인코딩하기 위해 System.Web.Helpers.Json를 사용하는

jsonString = Json.Encode(json); 

, 그것은 디버그 모드에서 타임 아웃의 원인이됩니다. Json.Encode (json)에 대한 시계를 추가하려고 시도 했으므로 "Evaluation timed out"이 반환됩니다.

우리 프로덕션 버전에는 아무런 문제가 없지만이 문을 실행할 때마다 응용 프로그램이 중단되므로 응용 프로그램을 디버깅하는 데 문제가 있습니다.

또한이 문제는 Windows 7 컴퓨터에서만 발생하며 Windows 10 컴퓨터에서는 문제가없는 것으로 나타났습니다. 따라서 우리는 디버깅을 위해 Windows 10 컴퓨터를 사용해야합니다.

Windows 7에서 이러한 긴 실행 문을 허용하지 않는 디버그 모드에는 몇 가지 제한이있는 것으로 보입니다. 디버그 모드에서 이러한 시간 제한 설정을 구성하는 방법이 있는지 알 수 있습니까?

+0

은 다른 스레드에서 실행되는 특정 코드 줄입니까? – Rahul

+0

UI 스레드에서 실행됩니다. 우리의 주요 용도는 응용 프로그램을 종료 할 때 실행중인 모든 데이터를 저장하는 것입니다. –

+0

또한, 모든 * win7 머신에서 또는 그 중 하나만 발생합니까? (단지 OS 특유의 것이거나 그 환경에 더 많은 환경을 구축하려는 시도입니다.) – NPras

답변

0

NPAS.

우리는 이제 Visual Studio 2015를 사용하고 있지만 "HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 14.0 \ Debugger \"아래에 "LocalsTimeout"항목이 없습니다.

하지만 "HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 12.0 \ Debugger \"에서 "LocalsTimeout"설정을 변경하면 문제를 해결할 수 있습니다.

이 설정은 다른 버전에서 공유되는 것으로 보입니다.

수정 : - 정말 흥미 롭습니다. 한 번만 작동합니다. 어쩌면 내가 설정을 바꾼 후에, json은 나의 테스트를 위해 충분히 크지 않을 것이다. - 다시 테스트했으나 아직 결과가 없습니다. - 값을 10000으로 늘렸으므로 처리하는 데 10 초가 걸리지는 않았지만 반환 할 수는 없습니다.

+0

문제가 System.Web 자체에 있는지 궁금합니다. 'Newtonjoft.Json'을 사용해 보셨습니까? – NPras

+0

System.Web.Helper와 같은 기능을 제공하지 않으므로 Newtonsoft.Json을 사용하도록 프로그램을 변환하는 방법을 알아야합니다. 하지만 나는 여러 번 테스트 해봤는데, 디버그 모드에서 동일한 객체를 변환하는 데 20 초 이상 걸리는 반면, 실행 파일에는 1 초 미만이 소요되는 것으로 나타났습니다. –

1

감사합니다. NPras, 맞습니다. 문제는 System.Web.Helper의 json에만 있습니다. 그냥 느린 변환 코드 중 하나를 수정하고 디버그 모드에서 다음 두 문을 실행하십시오.

문자열 jsonString = Json.Encode (json);

문자열 json2 = Newtonsoft.Json.JsonConvert.SerializeObject (json);

출력 문자열의 길이는 약 33K이며 첫 번째 문자열은 20 초가 걸리고 두 번째 문자열은 1 초로 반환 될 수 있으며 결과는 동일합니다.

그리고 더 많은 발견 결과, System.Web.Helper의 이러한 성능 저하는 백그라운드 스레드에서 실행되는 코드에서만 발생했습니다. UI 스레드에서 실행되는 경우 실행 파일과 동일한 성능을가집니다. 어쩌면, 디버그 모드 중, 그것은 Visual Studio IDE에 의해 차단 된 UI 스레드의 누군가를 기다리고 있습니다.

관련 문제