3 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
數(shù)據(jù)的版本控制通過(guò)屬性進(jìn)行處理。如果您不擔(dān)心版本控制,那么這沒(méi)問(wèn)題。如果是的話,這是一個(gè)巨大的問(wèn)題。
屬性方案的麻煩在于,它在許多瑣碎的情況下(例如添加新屬性)都非常流暢,但是當(dāng)您嘗試執(zhí)行將兩個(gè)枚舉值替換為不同的新枚舉值(或任何其他枚舉值)時(shí),它會(huì)很快崩潰長(zhǎng)期持久性數(shù)據(jù)附帶的常見(jiàn)方案數(shù))。
我可以介紹很多麻煩的細(xì)節(jié)。最后,如果需要的話,編寫(xiě)自己的序列化程序非常簡(jiǎn)單。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
我同意最后一個(gè)答案。性能相當(dāng)差。最近,我的編碼團(tuán)隊(duì)完成了將模擬從標(biāo)準(zhǔn)C ++轉(zhuǎn)換為C ++ / CLI的工作。在C ++中,我們有一個(gè)手寫(xiě)的持久性機(jī)制,該機(jī)制運(yùn)行良好。我們決定使用序列化機(jī)制,而不是重寫(xiě)舊的持久性機(jī)制。
在內(nèi)存占用量介于1/2和1 Gig之間的大多數(shù)舊模擬中,大多數(shù)對(duì)象具有指向其他對(duì)象的指針,并且在運(yùn)行時(shí)具有1000個(gè)對(duì)象,在一分鐘之內(nèi)將保留到大約10到15 Meg的二進(jìn)制文件。從文件還原是可比較的。
使用相同的數(shù)據(jù)文件(并排運(yùn)行),C ++ / CLI的運(yùn)行性能大約是C ++的兩倍,直到我們進(jìn)行持久性處理(新版本中的序列化)為止,編寫(xiě)過(guò)程需要3到5分鐘,序列化文件的大小約為10到20。序列化文件的大小約為舊文件的5倍。基本上,我們看到讀取時(shí)間增加了19倍,寫(xiě)入時(shí)間增加了5倍。這是不可接受的,我們正在尋找糾正此問(wèn)題的方法。
在檢查二進(jìn)制文件時(shí),我發(fā)現(xiàn)了一些問(wèn)題:1.所有類(lèi)型的類(lèi)型和程序集數(shù)據(jù)均以明文形式編寫(xiě)。這在空間上是無(wú)效的。2.每種類(lèi)型的每個(gè)對(duì)象/實(shí)例都寫(xiě)入了膨脹的類(lèi)型/裝配體信息。我們?cè)谑直3謾C(jī)制中所做的一件事是寫(xiě)出了一個(gè)已知的類(lèi)型表。在發(fā)現(xiàn)書(shū)面類(lèi)型時(shí),我們?cè)诖吮碇胁檎伊怂拇嬖?。如果不存在,則會(huì)使用類(lèi)型info創(chuàng)建一個(gè)條目,并分配一個(gè)索引。然后,我們將infor類(lèi)型作為整數(shù)傳遞。(類(lèi)型,數(shù)據(jù),類(lèi)型,數(shù)據(jù))此“技巧”將極大地減少大小。這可能需要兩次處理數(shù)據(jù),但是可以開(kāi)發(fā)“即時(shí)”流程,從而除了將其添加到表中,推送到數(shù)據(jù)流之外,
我希望重新實(shí)現(xiàn)一些核心序列化以這種方式對(duì)其進(jìn)行優(yōu)化,但是,可惜這些類(lèi)都是密封的!我們可能仍未找到捷徑。
- 3 回答
- 0 關(guān)注
- 1061 瀏覽
添加回答
舉報(bào)