原來在記憶體申請位址也是乙個費時的過程

2021-07-10 03:49:12 字數 737 閱讀 7105

最近用c#寫乙個udp通訊的程式,為了測試裝置通訊能力。特定的時間內向裝置發大量的資料。

先是以隨機數填充了乙個設定大小的byte 陣列;再每次擷取其中一段來傳送。

結果發現傳送資料量始終上不去。

一直查原因無果,最後改變方式:開始申請乙個固定大小的陣列,後來傳送直接傳送申請的固定陣列,不用擷取copy 記憶體。

結果當然:

以下是動態生成位元組陣列的結果:

累計傳送時長(毫秒):23559;累計傳送資料(位元組):1577472

累計傳送時長(毫秒):25270;累計傳送資料(位元組):1597489

累計傳送時長(毫秒):15305;累計傳送資料(位元組):1028000

累計傳送時長(毫秒):30626;累計傳送資料(位元組):2054000

累計傳送時長(毫秒):10122;累計傳送資料(位元組):1931776

以下兩條是非動生成陣列結果

累計傳送時長(毫秒):6389;累計傳送資料(位元組):2054000

累計傳送時長(毫秒):8680;累計傳送資料(位元組):3081000

以下兩條是放棄執行緒阻塞結果:

累計傳送時長(毫秒):4086;累計傳送資料(位元組):46244000

累計傳送時長(毫秒):4549;累計傳送資料(位元組):52550000

終結:申請記憶體位址,記憶體copy 是乙個比較耗時的過程。

本文版權:成都至誠恒遠物聯網技術**** 

**:www.heryit.cn

乙個程序在記憶體中的布局

對於乙個完整的程式,在記憶體中分布情況如下圖 值得一提的是 在c 中struct存放在棧區,class存放在堆區,所以一般struct要比class要快的。堆和棧的比較表 僅針對c 棧 stack 堆 heap 申請方式 由os自動分配。例如在函式宣告乙個區域性變數int b os自動在棧中為b開闢...

乙個程序在記憶體中的布局

對於乙個完整的程式,在記憶體中分布情況如下圖 值得一提的是 在c 中 struct 存放在棧區,class 存放在堆區,所以一般 struct 要比class 要快的。堆和棧的比較表 僅針對c 棧 stack 堆 heap 申請方式 由 os自動分配。例如在函式宣告乙個區域性變數 int b os ...

乙個程序在記憶體中的布局

對於乙個完整的程式,在記憶體中分布情況如下圖 值得一提的是 在c 中 struct 存放在棧區,class 存放在堆區,所以一般 struct 要比class 要快的。堆和棧的比較表 僅針對c 棧 stack 堆 heap 申請方式 由 os自動分配。例如在函式宣告乙個區域性變數 int b os ...