초심자의 일반적인 결함 - C#
2884 단어 C#
1 리소스 여유 확보
CLR 위탁 관리 환경은 쓰레기 회수 역할을 하기 때문에 이미 만든 대상이 차지하는 메모리를 현저하게 방출할 필요가 없습니다.그러나 이것은 당신이 사용한 모든 대상을 소홀히 할 수 있다는 것을 의미하지는 않는다.많은 대상들이 다른 유형의 시스템 자원을 봉인했다. 예를 들어 디스크 파일, 데이터 연결, 네트워크 포트 등이다.이러한 자원의 사용 상태를 유지하면 시스템의 자원을 급격히 소모하고 성능을 약화시키며 결국 프로그램 오류를 초래할 수 있다.파일, 네트워크 포트, 데이터 연결을 열 때, 이 자원을 더 이상 사용하지 않을 때, 가능한 한 빨리 이 자원을 현시적으로 방출해야 한다.또한 자원에 대한 조작은 일반적으로 이상포획처리(Try.Catch)를 증가해야 하는데 이때finally에서 자원을 방출하는 것을 잊지 마세요. 이상을 포획할 때도 자원을 정상적으로 방출할 수 있도록 하세요.
2 다중 스레드를 올바르게 중지합니다. FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}
만약 위 코드가 작업 라인에서finally에 이미 진행되었다고 가정하면, 이때 UI 라인이 이 라인의Abort () 방법을 호출하면 fs가 될 가능성이 높다.Close가 실행되지 않았을 때, 작업 라인이finally 코드 블록에서 튀어나왔습니다.이렇게 하면 너의 fs는 영원히 클로즈되지 않을 것이다.대부분의 경우,finally는 영원히 실행되지만,Thread 호출은 포함되지 않습니다.Abort로 인한 ThreadAbortException 이상은 이 이유를 감안하여 Abort를 사용하는 것을 권장하지 않습니다.호출자가 어떤 행동을 취했는지 (Thread.Abort () 를 직접 사용하지 말고, 작업 라인이 호출자의 정지 요청에 주동적으로 응답할 수 있는지에 의존하십시오.대체적으로 스레드가 정지되어야 한다면 스레드 자체가 호출자에게 Cancel의 인터페이스를 개방하는 것을 책임져야 한다.
3 유형 변환 관련
FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}
만약 위 코드가 작업 라인에서finally에 이미 진행되었다고 가정하면, 이때 UI 라인이 이 라인의Abort () 방법을 호출하면 fs가 될 가능성이 높다.Close가 실행되지 않았을 때, 작업 라인이finally 코드 블록에서 튀어나왔습니다.이렇게 하면 너의 fs는 영원히 클로즈되지 않을 것이다.대부분의 경우,finally는 영원히 실행되지만,Thread 호출은 포함되지 않습니다.Abort로 인한 ThreadAbortException 이상은 이 이유를 감안하여 Abort를 사용하는 것을 권장하지 않습니다.호출자가 어떤 행동을 취했는지 (Thread.Abort () 를 직접 사용하지 말고, 작업 라인이 호출자의 정지 요청에 주동적으로 응답할 수 있는지에 의존하십시오.대체적으로 스레드가 정지되어야 한다면 스레드 자체가 호출자에게 Cancel의 인터페이스를 개방하는 것을 책임져야 한다.
3 유형 변환 관련
질문
문자열 작업에서 결합이 많은 경우 StringBuilder를 사용하는 것이 좋습니다.String을 사용하면 성능이 크게 저하됩니다.왜냐하면string 대상은 매우 특수한 대상이기 때문에 일단 값을 부여받으면 바꿀 수 없다.실행할 때 String 클래스의 모든 연결 작업 (예를 들어 값 부여, '+' 등) 을 호출하면 메모리에 새 문자열 대상을 만들고, 이 대상에 새 메모리 공간을 할당해야 한다는 것을 의미합니다.
5 const 상수 수정으로 인한 문제
프로그램이 다른 dll의const 상수를 인용할 때 특히 주의해야 합니다.이 dll의 const 상수를 수정한 후, 이 dll의 이 const 상수를 인용한 모든 프로그램을 다시 컴파일해야 합니다. 그렇지 않으면 프로그램에서 사용하는 이 상수 값은dl의 것과 일치하지 않습니다.또한 const 대신readonly를 사용하면 이 문제를 해결할 수 있습니다. 다시 컴파일할 필요가 없습니다. const는 컴파일링 상수이고,readonly는 실행 시 상수이기 때문입니다.
6 C# 컴파일 대상 플랫폼 문제
프로그램이 의존하는 dll의 컴파일링 목표 플랫폼이 X86이면 프로그램 자체의 컴파일링 목표 플랫폼도 반드시 X86이어야 한다. 그렇지 않으면 64비트 컴퓨터가 실행될 수 없다.
7 스레드 간 액세스 제어
인터페이스 프로그램을 개발할 때 시간이 많이 걸리는 작업이 발생할 수 있습니다. 프로그램의 우호성을 위해 우리는 보통 작업 라인에서 시간을 소모하는 작업을 수행하고 실행 정보를 메인 UI 라인에 표시합니다.작업 스레드에서 주 UI 스레드의 컨트롤을 직접 조작하면 이상이 발생하기 쉽습니다. "다른 스레드에서 컨트롤 스레드를 만드는 값을 수정할 수 없습니다."컴파일러가 크로스 스레드에 대한 접근을 금지하는 것을 설정하면 오류가 발생하지 않지만 예측할 수 없는 문제가 발생할 수 있습니다.이때 위탁 또는 익명 위탁의 방식으로 실현하는 것을 건의합니다.
8 이상을 다시 던지는 정확한 방법 try
{
//do something
}
catch(Exception ex)
{
throw;
}
정확한 쓰기 방법은throw입니다.throw ex를 사용하지 마십시오. 그렇지 않으면 Stacktrace가 비어 진정한 이상 코드의 위치를 찾을 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지
Evergreen
.Net Framework SDK 4.8
VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
인터페이스 프로그램을 개발할 때 시간이 많이 걸리는 작업이 발생할 수 있습니다. 프로그램의 우호성을 위해 우리는 보통 작업 라인에서 시간을 소모하는 작업을 수행하고 실행 정보를 메인 UI 라인에 표시합니다.작업 스레드에서 주 UI 스레드의 컨트롤을 직접 조작하면 이상이 발생하기 쉽습니다. "다른 스레드에서 컨트롤 스레드를 만드는 값을 수정할 수 없습니다."컴파일러가 크로스 스레드에 대한 접근을 금지하는 것을 설정하면 오류가 발생하지 않지만 예측할 수 없는 문제가 발생할 수 있습니다.이때 위탁 또는 익명 위탁의 방식으로 실현하는 것을 건의합니다.
8 이상을 다시 던지는 정확한 방법 try
{
//do something
}
catch(Exception ex)
{
throw;
}
정확한 쓰기 방법은throw입니다.throw ex를 사용하지 마십시오. 그렇지 않으면 Stacktrace가 비어 진정한 이상 코드의 위치를 찾을 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지
Evergreen
.Net Framework SDK 4.8
VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
try
{
//do something
}
catch(Exception ex)
{
throw;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.