Як ми всі знаємо, в цифровому світі існує багато способів виконати ту саму роботу / отримати очікувані результати.
А обов'язки / ризики, що випливають з коду, лежать на плечах розробників.
Це мало, але, мабуть, дуже корисний приклад з .NET світу ..
Тому багато розробників .NET використовують вбудований BinaryReader - BinaryWriter для серіалізації даних для продуктивності / отримання контролю над процесом ..
Це вихідний код CSharp для вбудованого в клас BinaryWriter класу FrameWork 'один із перевантажених методів запису:
// 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 і якщо ви можете перевірити вихідні коди BCL - .NET Base Class Library- від MSDN, ви можете побачити чимало зниження продуктивності від розробника.
Будь-яка точка з джерела BCL Це нормально, що ви бачите, що розробник вирішив використовувати цикли while () або foreach (), які могли б реалізувати швидший цикл для () у своєму коді.
Цей невеликий прибуток дає нам загальну продуктивність ..
А якщо ми повернемося до методу BinaryWriter.Write ().
Насправді додаткове присвоєння імплементації _buffer не є виною розробника. Це точно вирішити "залишатися в безпеці"!
Припустимо, що ми вирішили не використовувати _buffer і вирішили застосувати другий метод. Якщо ми спробуємо надсилати багатотисячні байти через провід (тобто завантажувати / завантажувати дані BLOB або CLOB) за допомогою другого методу, це може вийти з ладу, тому що з'єднання втрачено. Тому ми намагаємось надіслати всі дані без будь-яких перевірок та механізму контролю. Коли з'єднання втрачено, і сервер, і клієнт ніколи не знають, чи надсилаються дані завершено чи ні.
Якщо розробник вирішить "залишатися в безпеці", то це, звичайно, означає, що витрати на продуктивність залежать від впровадженого механізму "перебування в безпеці".
Але якщо розробник вирішить "стати ризикованим, набути продуктивності", це теж не помилка. Поки є деякі дискусії щодо "ризикованого" кодування.
І як невеличке зауваження: розробники комерційних бібліотек завжди намагаються бути в безпеці, оскільки вони не можуть знати, де їх код використовуватиме.