2013-12-18 2 views
2

.NET Framework가 지원하는 것보다 더 많은 로컬 변수를 만들려고하는 매우 큰 방법이 있습니다. 대략 코드 줄의 크기는 147000이고 지역 변수의 개수는 약 75000입니다.이 기사에서는 http://support.microsoft.com/kb/919514을 발견했지만 여기에서는 .net 2.0에서이 문제에 대해 말했지만 Windows 8.1에서는 .net 4.0을 사용하고 있습니다. 로컬 변수의 수동 제한을 늘릴 수 있습니까?로컬 변수의 한계를 늘리는 방법

내 프로젝트는 .docx 파일을 생성하는 간단한 콘솔 응용 프로그램입니다.

+17

147K 라인과 75K 변수 아래에 보관해야합니까? "간단한 콘솔 응용 프로그램"- 아마도 여기에 잘못된 질문을하고 있습니다. 일반적으로 "일부 코드 게시"라고 말하고 싶지만 ....하지 마세요 ;-) –

+1

리팩토링은 어떨까요? – Bas

+0

어떤 종류의 "스파게티 코드"는이 방법입니다 ... –

답변

11

C# 컴파일러에서 생성 한 코드 인 MSIL에서 막강한 한계에 부딪 히고 있습니다. 로컬 변수는 Opcodes.LdLoc instruction과 함께로드됩니다. 이 명령어에는 여러 가지 변형이 있으며 일반적인 경우에 최적화되어 있습니다. 난 "최대"하나에 연결되어, 그것은 지역 변수 인덱스에 대한 16 비트 서명되지 않은 인덱스가 걸립니다. MSIL 4 바이트로 인코딩 : 당신이 발견

FE 0C < unsigned int16 > 

핫픽스는 서명 된 값 대신 부호없는 하나의 인덱스를 해석 지터 버그를 해결하는 것이 었습니다. 메서드에 32767 개 이상의 로컬 변수가있을 때 코드 폭탄 만들기.

그러나 분명히 UInt16.MaxValue+1 개 이상의 색인을 가질 수는 없습니다. 65,536입니다. 75,000 개의 변수를 사용하면 그 한계를 초과했습니다. 이에 대한 해결 방법은 없습니다

, 당신은 지역 변수의 수를 제한하고 65536

+5

+1 * "65536 이하로 유지하십시오"* - 바람직하게는 * 우물 *. –

1

정말 작은 방법/클래스로 나누어야합니다. 그것은 거대한 파일이며, 결국 당신 이외의 누군가가 그것을 지원해야 할 것입니다.

트릭은 더 많은 지역 주민을 허용하는 런타임을 얻는 방법을 찾는 것이 아니라 처음부터 알맞은 코드를 작성하는 것입니다. 아, 그리고이 큰 제품은 "간단한 콘솔 응용 프로그램"범주에 속하지 않습니다!

+0

예 각 클래스마다 ~ 5k ~ 6k 개의 변수가 있지만 동일한 문제가 있습니다. – BorHunter

+0

"간단한 콘솔 응용 프로그램"인 경우 OP가 "상당히 복잡한 응용 프로그램"이라고 생각하는 것에 대해 궁금합니다. , "복잡한 복잡한 응용 프로그램"은 말할 것도 없습니다. D – oerkelens

+0

@BorHunter -이 변수가 필요하지 않을 수도 있습니다. 작은 코드를 게시 할 수 있다면 재미있을 것입니다. 그러면 우리가하는 일을 볼 수 있습니다. – Sean

1

큰 방법은 최대 20 줄 또는 25 줄까지 포함 할 수 있습니다. 어떤 프로그래머는 방법에 대한 20 줄조차도 너무 많다고 말할 것입니다. 이 방법을 다른 방법으로 많이 나누어야합니다. 당신이 말한 코드는 분명히 가난한 코드이고 디버깅, 이해 또는 수정하기가 매우 어렵습니다.

관련 문제