좋은 답변. 나는 자바가 스택이나 힙 메모리 위치의 사용에 의존한다고 덧붙였다. C#도 마찬가지입니다. 원시 포인터를 사용한다는 아이디어는 C 코드 배경에서 오는 C#에 대한 추가 사항입니다. C#과 C/C++는 동일한 코드 언어는 아니지만 몇 가지 공통점 의미를 공유합니다. "안전하지 않은"코드를 사용하면 가비지 수집으로 인해 성능이 크게 저하되지 않고 런타임 인스턴스 당 메모리가 약 2GB (CLR 당 C#, JVM 인스턴스 당 Java의 경우)로 제한되는 힙에 대형 객체를 보관할 필요가 없습니다. 어떤 경우에는 C#의 기능을 사용하여 안전하지 않거나 수동으로 관리되는 메모리 포인터를 활용하여 힙 외부에서 캐싱과 같은 문제에 대한 타사 도구가 거의 없다는 사실을 피할 수 있습니다.
안전하지 않은 코드를 사용하는 경우 "일회용 유형"및 "종료 자"에 익숙해 지도록주의하십시오. 이는 다소 진보 된 방법 일 수 있으며 객체를 올바르게 폐기하지 않는 것의 파급 효과는 C 코드와 마찬가지로 두려운 MEMORY LEAK입니다. 반향으로 인해 앱에 대한 추억이 없어지고 넘어집니다 (좋지 않음). 그래서 C#에서는 기본적으로 허용하지 않으므로 "안전하지 않은"키워드로 수동으로 제어되는 포인터의 사용을 무시해야합니다. 이렇게하면 수동으로 처리 된 메모리가 의도적으로 처리됩니다. "안전하지 않은"키워드를 다룰 때 C 코드 모자를 사용하십시오.
Andrew Troelsen의 "Pro C# 2010 and .Net Platform"의 "Understanding Object Lifetime"장을 참조하십시오. 온라인 참조를 선호하는 경우 MSDN 웹 사이트를 참조하십시오. Implementing Finalize and Dispose to Clean Up Unmanaged Resources
마지막 메모 - 관리되지 않는 메모리는 개체의 종료 자 부분 (~ ObjectName() {...})에서 해제됩니다.이러한 패턴은 성능에 오버 헤드를 추가하므로 대기 시간이 더 짧은 시나리오를 처리하는 경우 개체를 비추는 것이 가장 좋습니다. 인간의 반응을 다루는 경우에는 절대적으로 필요한 부분을 고려해야합니다.
+1 프로그래머의 관점은'unsafe' 키워드를 사용하여 보호 기능을 해제한다는 것입니다. 또한 IT 관리자의 관점에서 볼 때 ** 보안 정책을 통해 ** 응용 프로그램이 응용 프로그램을 보호하지 못하도록 방지 할 수 있다는 사실을 알고 있어야합니다. – MarkJ
@ MarkJ : 좋은 지적. –