아시다시피, 디지털 세계에는 동일한 작업을 수행하고 예상 결과를 얻는 여러 가지 방법이 있습니다.
코드에서 발생하는 책임 / 위험은 개발자의 어깨에 있습니다.
이것은 작지만 .NET 세계에서 매우 유용한 예를 생각합니다.
따라서 많은 .NET 개발자는 데이터 직렬화에 내장 BinaryReader-BinaryWriter를 사용하여 성능을 제어하고 프로세스를 제어합니다.
이것은 프레임 워크의 내장 BinaryWriter 클래스의 오버로드 된 Write 메소드 중 하나의 CSharp 소스 코드입니다.
// Writes a boolean to this stream. A single byte is written to the stream
// with the value 0 representing false or the value 1 representing true.
//
public virtual void Write(bool value)
{
//_buffer is a byte array which declared in ctor / init codes of the class
_buffer = ((byte) (value? 1:0));
//OutStream is the stream instance which BinaryWriter Writes the value(s) into it.
OutStream.WriteByte(_buffer[0]);
}
보다시피,이 메소드는 _buffer 변수에 추가로 할당하지 않고 작성할 수 있습니다 :
public virtual void Write(bool value)
{
OutStream.WriteByte((byte) (value ? 1 : 0));
}
할당하지 않으면 우리는 몇 밀리 초를 얻을 수있다.이 몇 밀리 초는 "거의 아무것도 없다"고 받아 들일 수 있지만 수천 개의 글이 있다면 (즉, 서버 프로세스에서)?
"몇"이 2 (밀리 초)이고 수천 인스턴스가 2.000에 불과하다고 가정합니다. 이는 프로세스 시간이 4 초 더 길다는 것을 의미합니다.
.NET을 계속 사용하고 MSDN에서 BCL-.NET 기본 클래스 라이브러리-의 소스 코드를 확인할 수 있으면 개발자가 결정한 많은 성능 손실을 확인할 수 있습니다.
BCL 소스의 요점 개발자가 코드에서 더 빠른 for () 루프를 구현할 수있는 while () 또는 foreach () 루프를 사용하기로 결정한 것이 일반적입니다.
이 작은 이익은 우리에게 총 성능을 제공합니다 ..
그리고 BinaryWriter.Write () 메소드로 돌아갑니다.
실제로 _buffer 구현에 추가로 할당하는 것은 개발자 결함이 아닙니다. 이것은 "안전한 상태"를 유지하기로 결정합니다!
_buffer를 사용하지 않고 두 번째 방법을 구현하기로 결정했다고 가정합니다. 두 번째 방법으로 와이어를 통해 수천 바이트를 보내려고하면 (즉, BLOB 또는 CLOB 데이터 업로드 / 다운로드) 두 번째 방법으로 실패 할 수 있습니다. 연결을 잃어 버렸습니다. 우리는 검사 및 제어 메커니즘없이 모든 데이터를 보내려고합니다.
개발자가 "안전한 체재"를 결정하면 일반적으로 성능 비용은 구현 된 "안전한 체재"메커니즘에 달려 있음을 의미합니다.
그러나 개발자가 "위험을 감수하고 성능을 향상 시키겠다"고 결정한 경우에도 이는 잘못된 일이 아닙니다.
그리고 작은 참고로 : 상용 라이브러리 개발자는 코드가 어디에 사용 될지 알 수 없기 때문에 항상 안전을 유지하려고 노력합니다.