簡體   English   中英

從程序中刪除 byte[] 和 C# 中的 memory

[英]Deleting byte[] from program and memory in C#

我正在制作一個程序,其中一個函數為了正確創建要發送的消息,不斷調用我生成的 function 以將每個部分添加到數組中。 問題是,在 C# 中你不能這樣做,因為字節 arrays (如果我沒記錯的話,任何類型的數組)都有一個無法更改的有限長度。

因此,我想到了創建 2 字節變量。 第一個將獲得第一個值。 第二個將在您知道必須添加的新字節數量后創建,然后,您將刪除第一個變量並再次創建它,使用前一個變量的長度,但添加新值的長度,對第二個變量做同樣的事情。 我生成的代碼是:

                byte[] message_mod_0 = adr_and_func;
                byte[] byte_memory_adr = AddAndTypes.ToByteArray(memory_adr);
                byte[] message_mod_1 = new byte[2 + byte_memory_adr.Length];
                message_mod_1 = AddAndTypes.AddByteArrayToByteArray(message_mod_0, byte_memory_adr);
                AddAndTypes.AddByteArrayToByteArray(message_mod_0, AddAndTypes.IntToByte(value));
                byte[] CRC = Aux.CRC(message_mod_0);
                AddAndTypes.AddByteArrayToByteArray(message_mod_0, CRC);

在這段代碼中,我所指的兩個變量是 message_mod_0 和 message_mod_1。 我還考慮執行刪除和重新聲明所需的 byte_memory_adr 變量,以便知道要添加到輸出消息中的字節數組的長度。

參數 adr_and_func、memory_adr 和 value 作為我正在制作的 function 的輸入參數給出。

問題可以總結為:有什么方法可以刪除它們創建的同一個 scope 中的變量? 而且,如果可以做到,如果我在刪除第一個變量后創建一個同名的新變量,會有什么問題嗎? 我想不出為什么會發生這種情況,但我對這種編程語言還是很陌生。

另外,我不知道是否有任何不那么混亂的方式來做到這一點。

這聽起來就像您正在編寫自己的自定義序列化程序。

如果可能的話,我建議只使用現有的庫,比如protobuf.net來定義你的消息。

如果這是不可能的,您可以使用BinaryWriter將您的值寫入Stream 如果您想將其保留在 memory 中,請使用MemoryStream並在完成后使用.ToArray() 來獲取所有字節的數組。

至於memory,不用擔心。 除非您有千兆字節大小的消息,否則 memory 要求應該不是問題,並且垃圾收集器將在不再需要時自動回收 memory,並且它可以在最后一次使用后執行此操作,而不管 Z31A1FD140BE4BEF2D8ZA121EC9A155A8 如果你有巨大的 memory 流,你可能想看看像可回收的 memory stream這樣的東西,因為這可以避免一些分配性能問題和碎片問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM