專案裡資料庫表有很多字段,而且有不少欄位不確定長度,所以決定,把大多數不常用字段用 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...
有關序列化的講解
序列化是什麼 序列化就是將乙個物件的狀態 各個屬性量 儲存起來,然後在適當的時候再獲得。序列化分為兩大部分 序列化和反序列化。序列化是這個過程的第一部分,將資料分解成位元組流,以便儲存在檔案中或在網路上傳輸。反序列化就是開啟位元組流並重構物件。物件序列化不僅要將基本資料型別轉換成位元組表示,有時還要...
有關序列化的講解
序列化是什麼 序列化就是將乙個物件的狀態 各個屬性量 儲存起來,然後在適當的時候再獲得。序列化分為兩大部分 序列化和反序列化。序列化是這個過程的第一部分,將資料分解成位元組流,以便儲存在檔案中或在網路上傳輸。反序列化就是開啟位元組流並重構物件。物件序列化不僅要將基本資料型別轉換成位元組表示,有時還要...