'Programming/.NET General'에 해당되는 글 4건

  1. 2010.04.23 .NET Framework CLR Facilities
  2. 2008.09.18 Stack vs Heap
  3. 2008.09.16 Exception Handling Best Practices in .NET
  4. 2008.09.09 MSBuild 오류코드 errorMSB3095

[이미지 출처 : Amazon.com]

아주 기초적이지만 막상 누군가 묻는다면 대답하기 어려울 때가 많습니다.

CLR의 기능이 무엇인가 묻는다면 여러분은 뭐라 답하시겠어요?
Jeffrey Richter의 CLR via C# 3rd에서는 CLR의 기능을 이렇게 정의합니다.

  • Exception Handling and State Management
  • Automatic Memory Management
  • CLR Hosting and AppDomains
  • Assembly Loading and Reflection
  • Runtime Serialization

아주 당연한 내용이라서 무심코 지나치다 보면 기초가 흔들리겠지요.
기초를 탄탄하게 하는 것. 무엇보다 중요합니다~



Posted by spponge

댓글을 달아 주세요

Stack:

  • Stored in computer RAM like the heap.
  • Variables created on the stack will go out of scope and automatically deallocate.
  • Much faster to allocate in comparison to variables on the heap.
  • Implemented with an actual stack data structure.
  • Stores local data, return addresses, used for parameter passing
  • Can have a stack overflow when too much of the stack is used. (mostly from inifinite (or too much) recursion, very large allocations)
  • Data created on the stack can be used without pointers.
  • You would use the stack if you know exactly how much data you need to allocate before compile time and it is not too big.
  • Usually has a maximum size already determined when your program starts

Heap:

  • Stored in computer RAM like the stack.
  • Variables on the heap must be destroyed manually and never fall out of scope. The data is freed with delete, delete[] or free
  • Slower to allocate in comparison to variables on the stack.
  • Used on demand to allocate a block of data for use by the program.
  • Can have fragmentation when there are a lot of allocations and deallocations
  • In C++ data created on the heap will be pointed to by pointers and allocated with new or malloc
  • Can have allocation failures if too big of a buffer is requested to be allocated.
  • You would use the heap if you don't know exactly how much data you will need at runtime or if you need to allocate a lot of data.
  • Responsible for memory leaks

출처 : http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap



Posted by spponge
TAG heap, Memory, stack

댓글을 달아 주세요

원문을 읽어 보면 수긍이 가는 내용도 있고 아닌 내용도 있다. 한번쯤 읽어 보고 참고하면 좋겠다.

원문 요약

절대로 실패하지 않는 Software는 불가능에 가깝다
  • 초기에 Check하라.
  • 외부 Data를 신뢰하지 마라.
  • 유일하게 믿을 수 있는 Device는 Video, mouse, keyboard 뿐이다.(다른 외부 데이터 소스는 신뢰할 수 없다는 의미)
  • Write(디스크 등에 쓰기 작업을 의미) 도 실패할 수 있다.
  • 안전한 코드 작성
  • throw new Exception() 금지. 대신에 ApplicationException 에서 상속하여 직접 만든 exception class를 사용할 것.
  • Message Field에 중요한 예외 정보를 넣지 말것.
  • Thread 당 단일 catch 블럭을 두라.
  • 일반 예외가 발생하면 기록되어야 한다.(여기 저기 catch 블록이 득실거려서 예외 상황이 중복하여 기록되지 않도록 하라는 의미)
  • Exception.ToString()을 사용하여 기록하고 Exception.Message만 기록하는 것 금지.
  • thread 에서 예외를 한 번 이상 catch 하지 말라.
  • 예외를 꿀꺽 삼키지 말라.(아무 것도 하지 않는 그런 catch block은 안좋다)
  • 자원 정리 코드는 반드시 finally block에서 작성.
  • 모든 곳에 using 키워드를 써라.(Dispose() 패턴을 구현하는 객체을 사용할 때는 using block을 쓰라는 의미)
  • 에러 상황에서 특별한 값을 return하지 말라.(예외 상황에 값을 반환하는 것은 비효율적이고 아무 도움이 되지 않기 때문 등등..)
  • method로 부터의 반환 정보의 의미로 예외 처리를 사용하지 마라.
  • 에어 처리를 위한 예외는 무시되어서는 안된다.
  • exception을 re-throwing 할 때에는 statkc trace 정보를 함께 전달해야 한다.
  • 의미없이 예외를 수정하지 마라.
  • 예외는 직렬화 가능 해야 한다.(user defined exception을 사용할 경우..)
  • 예외 발생 가능성이 있는 코드에는 Assert 대신 throw an Exception사용.(Assert는 Unit Test를 위해서 남겨 둘 것)
  • 각 Exception class에는 최소한 원래 세개의 생성자를 가지도록 할 것.(참고 http://msdn.microsoft.com/en-us/library/aa328363.aspx)
  • AppDomain.Unhandled Exception Event를 사용 할 때는 주의하라.
  • 시간과 노력을 낭비하지 말 것.(Exception Management Application Block, Microsoft Enterprise Instrumentation Framework 등의 좋은 Framework 들이 있다)

원문 링크 : http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx



Posted by spponge

댓글을 달아 주세요

.net framework 3.5 sp1 혹은 3.5 언어 팩 sp1을 설치한 후에 MSBuild를 이용해서 빌드시 아래와 같은 오류 코드를 내뱉는 경우가 있다.

C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets (1353,9):
           
            errorMSB3095: 잘못된 인수입니다. 문화권 ID 2155(0x086B)은(는) 지원되는 문화권이 아닙니다.


이 오류 코드는 .net framework 3.5 sp1 혹은 3.5 언어 팩 sp1을 설치하고 시스템을 리부팅 하지 않아서 발생하는 문제이다.

해결 방법은 당연히 "리부팅"



Posted by spponge

댓글을 달아 주세요