私たちが知っているように、デジタルの世界では、同じ仕事をしたり、期待した結果を得る方法がたくさんあります。
そして、コードから生じる責任/リスクは開発者の肩にかかっています。
これは小さいですが、.NETの世界からの非常に便利な例だと思います。
そのため、多くの.NET開発者は、データのシリアル化で組み込みのBinaryReader-BinaryWriterを使用して、パフォーマンスを向上させたり、プロセスを制御したりしています。
これは、FrameWorkの組み込みBinaryWriterクラスのオーバーロードされたWriteメソッドの1つの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秒長くなることを意味します。4秒後に戻ります。
引き続き.NETからサブジェクトし、MSDNのBCL-.NET Base Class Library-のソースコードを確認できる場合は、開発者が決定した多くのパフォーマンスの低下を確認できます。
BCLソースからのポイントのいずれか開発者がwhile()またはforeach()ループを使用することを決定したのは通常のことです。これにより、コードでより高速なfor()ループを実装できます。
この小さな利益により、総合的なパフォーマンスが得られます。
そしてBinaryWriter.Write()メソッドに戻ると..
実際には、_buffer実装への追加の割り当ては開発者の責任ではありません。
_bufferを使用せずに2番目のメソッドを実装することを決定したと仮定します。2番目のメソッドを使用して数千バイトをワイヤ経由で送信しようとすると(つまり、BLOBまたはCLOBデータのアップロード/ダウンロード)、一般的に失敗する可能性があります。接続が失われました。チェックや制御メカニズムなしですべてのデータを送信しようとするためです。接続が失われた場合、サーバーとクライアントの両方が送信されたデータが完了したかどうかを知ることはありません。
開発者が「安全を確保する」と決定した場合、通常、パフォーマンスコストは実装された「安全を確保する」メカニズムに依存することを意味します。
しかし、開発者が「リスクを冒してパフォーマンスを上げる」と決定した場合も、これは誤りではありません。「危険な」コーディングについていくつかの議論があるまでは。
そして、小さなメモとして:商用ライブラリの開発者は、コードがどこで使用されるのかわからないため、常に安全を心がけています。