Рекомендация от JAVA заключается в присвоении null
из https://docs.oracle.com/cd/E19159-01/819-3681/abebi/index.html
Явное назначение нулевого значения переменным, которые больше не нужны, помогает сборщику мусора идентифицировать части памяти, которые можно безопасно восстановить. Хотя Java обеспечивает управление памятью, это не предотвращает утечку памяти или чрезмерное количество памяти.
Приложение может вызывать утечку памяти, не освобождая ссылки на объекты. Это предотвращает сборщик мусора Java от восстановления этих объектов и приводит к увеличению объема используемой памяти. Явное сокращение ссылок на переменные после их использования позволяет сборщику мусора восстанавливать память.
Один из способов обнаружения утечек памяти - использовать инструменты профилирования и получать снимки памяти после каждой транзакции. Безтекучее приложение в устойчивом состоянии покажет постоянную активную память кучи после сбора мусора.
blockquote>
Похоже, что вы используете этот код Delphi, не понимая, что он делает. Исходя из ваших результатов, мы можем заключить, что вы используете версию Delphi до Unicode (т.е. D2007 или более раннюю). Также можно догадаться, что ZrepBuf
определяет массив байтов или [Ansi] Char. Таким образом, метод работает следующим образом:
For I:= 0 To 3 Do
TmpPChar[I] := ZRepB[Posit+I]; /* Copy four sequential bytes to TmpPChar array */
PLong := @TmpPChar; /* Take a pointer to the head of the array */
InLong := PLong^; /* Dereference the pointer, interpreting as a 32-bit int */
Это код для преобразования четырех байтов в 32-разрядное целое число. В Delphi тип LongInt
является псевдонимом для 32-битного типа integer
, эквивалентного типу int
в C #, а не long
. В коде Delphi оператор XOR не используется. В PLong^
оператор ^
является операцией разыменования.
В C # вы можете полностью избежать кода unsafe
и просто выполнить это преобразование, используя класс BitConverter
:
byte[] b = new byte[4] { 0x2E, 0x02, 0x00, 0x00 };
int result = BitConverter.ToInt32(b, 0); // result == 558
Здесь я определил входной массив как byte[]
, поскольку char
в C # (и в Delphi 2009 или новее) является 16-битным типом (два байта) для хранения символов Unicode. Данные, которые вы читаете, зашифрованы ANSI - я предполагаю, что вы понимаете, как читать ваш текстовый файл в байтовый массив.
Кстати, в более современном Delphi вы также можете переписать код указателя выше, чтобы использовать класс TEncoding
для выполнения этой функции , как описано здесь , аналогично классу BitConverter
в C #. [тысяча сто двадцать один]