有關於序列化速度的測試

2022-03-24 15:24:02 字數 2106 閱讀 3202

專案裡資料庫表有很多字段,而且有不少欄位不確定長度,所以決定,把大多數不常用字段用 xml 序列化的方式,儲存到乙個欄位內,不過卻發現,從網上取一條 10k 左右的 xml 資料,反序列化,解析、轉義,然後分別設定到4、5個物件中,這些物件,再對自身的不常用字段進行 xml 序列化,然後儲存物件到資料庫,竟然要花 5 秒左右的時間。

因為專案使用了 coolite,json 就成了乙個比較簡單的選擇,於是用 coolite 自帶的 json 序列化(其實是 newtonsoft json)進行序列化測試,對於我測試的 7k 左右的大多數是字串的資料來說,json 的速度大概是 xml 的 3 倍左右,而且序列化出的字串,也比 xml 小三分之一左右。於是把資料庫中的序列化字段改成 json,速度馬上有了乙個大的提高。

不過,在網上搜到了一篇文章,比較了幾種序列化方式,說是 php-rpc 是綜合效果最好的,於是也找來,一併寫了測試程式如下:

**

class

program

private

static

void

checktwowaytime(

string

text, callbackvoidhandler scallback, callbackvoidhandler dcallback)

serialize ms: , deserialize ms: , length of string:

", text, s, d, _temp.length);

}private

static

long

checktime(callbackvoidhandler callback)

private

static

string

phpserialize(singletrade obj)

private

static

singletrade phpdeserialize(

strings);

var result

=(singletrade)php.deserialize(m);

return

result;}}

執行了三次這個程式,三次的結果如下:

c:\debug>besten.migration.exe

xml serialize ms: 148, deserialize ms: 161, length of string: 7233

json serialize ms: 82, deserialize ms: 29, length of string: 5344

php serialize ms: 8, deserialize ms: 18, length of string: 8836

c:\debug>besten.migration.exe

xml serialize ms: 161, deserialize ms: 165, length of string: 7233

json serialize ms: 74, deserialize ms: 42, length of string: 5344

php serialize ms: 13, deserialize ms: 17, length of string: 8836

c:\debug>besten.migration.exe

xml serialize ms: 165, deserialize ms: 180, length of string: 7233

json serialize ms: 67, deserialize ms: 24, length of string: 5344

php serialize ms: 9, deserialize ms: 26, length of string: 8836

可以看到,php-rpc 序列化的速度,大概是 xml 的 10 到 20 倍之間,反序列化的速度也是 xml 的 8 倍左右,所以,專案下一步的計畫就是把序列化欄位的方法改成 php-rpc 了。

看了一下 php-rpc 的序列化方法描述,它的字串序列化比較特殊,使用前置長度而不進行轉義的方式,所以速度比較快、而占用記憶體比較小也就不奇怪了。只是還沒研究它序列化出的位元組陣列究竟是否直接就是字串,而不需要用 base64 呢?

關於序列化的測試

表 1 1990 01 01 00 00 00.000 0.73 2 1990 01 02 00 00 00.000 0.71 共21914 條記錄 今天試了下datatable序列化後的資訊 gzip gzipstream binary org 394,179 gzip 244,806 xml o...

有關序列化的講解

序列化是什麼 序列化就是將乙個物件的狀態 各個屬性量 儲存起來,然後在適當的時候再獲得。序列化分為兩大部分 序列化和反序列化。序列化是這個過程的第一部分,將資料分解成位元組流,以便儲存在檔案中或在網路上傳輸。反序列化就是開啟位元組流並重構物件。物件序列化不僅要將基本資料型別轉換成位元組表示,有時還要...

有關序列化的講解

序列化是什麼 序列化就是將乙個物件的狀態 各個屬性量 儲存起來,然後在適當的時候再獲得。序列化分為兩大部分 序列化和反序列化。序列化是這個過程的第一部分,將資料分解成位元組流,以便儲存在檔案中或在網路上傳輸。反序列化就是開啟位元組流並重構物件。物件序列化不僅要將基本資料型別轉換成位元組表示,有時還要...