DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
生活随笔
收集整理的這篇文章主要介紹了
DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???DataRabbit 3.0重寫了DataRabbit 2.0的ORM實現的內核,性能提升了90倍左右,結果是DataRabbit 3.0的ORM性能與直接使用ADO.NET的性能已經非常接近。這是如何做到的?
???主要是基于兩點:
(1)DataRabbit 2.0 基于泛型和反射實現,而DataRabbit 3.0 基于泛型和Emit動態程序集實現。
???DataRabbit 2.0使用反射機制將值在O和R之間傳遞,如此大量使用反射會使性能折損不少。DataRabbit 3.0在運行時,會根據Table的Schema動態發射(Emit)針對該表的數據訪問器(Accesser)于內存中,并緩存它。DataRabbit 3.0將直接使用發射得到的數據訪問器來實現值在O和R之間的傳遞,完全避免的反射。
(2)緩存Table Schema。
???2.0版本中,當IORMAccesser基于Transaction時,其所采用的ISchemaAccesser也是基于Transaction的,由于ISchemaAccesser基于Transaction,所以一個ISchemaAccesser對象在本次事務結束時也會釋放,這使得已經獲取的Table Schema無法緩存(雖然ISchemaAccesser自身有緩存Schema的功能)。于是,我修改IORMAccesser使其采用基于非事務的ISchemaAccesser,這樣Table Schema就會被緩存下來以重復使用,避免了每次ORM Transaction 訪問數據庫時,都需要去重新獲取Schema所帶來的性能損失。
(3)其它細節優化。
???DataRabbit 2.0?與 DataRabbit 3.0關于ORM的性能對比。
(注:結算一局需要在同一Transaction中6次訪問數據庫,其中還包含了業務計算。)
???下面給出DataRabbit 3.0的下載。
???關于DataRabbit的更多介紹請見:DataRabbit 輕量的數據訪問框架(00) -- 序
???主要是基于兩點:
(1)DataRabbit 2.0 基于泛型和反射實現,而DataRabbit 3.0 基于泛型和Emit動態程序集實現。
???DataRabbit 2.0使用反射機制將值在O和R之間傳遞,如此大量使用反射會使性能折損不少。DataRabbit 3.0在運行時,會根據Table的Schema動態發射(Emit)針對該表的數據訪問器(Accesser)于內存中,并緩存它。DataRabbit 3.0將直接使用發射得到的數據訪問器來實現值在O和R之間的傳遞,完全避免的反射。
(2)緩存Table Schema。
???2.0版本中,當IORMAccesser基于Transaction時,其所采用的ISchemaAccesser也是基于Transaction的,由于ISchemaAccesser基于Transaction,所以一個ISchemaAccesser對象在本次事務結束時也會釋放,這使得已經獲取的Table Schema無法緩存(雖然ISchemaAccesser自身有緩存Schema的功能)。于是,我修改IORMAccesser使其采用基于非事務的ISchemaAccesser,這樣Table Schema就會被緩存下來以重復使用,避免了每次ORM Transaction 訪問數據庫時,都需要去重新獲取Schema所帶來的性能損失。
(3)其它細節優化。
???DataRabbit 2.0?與 DataRabbit 3.0關于ORM的性能對比。
(注:結算一局需要在同一Transaction中6次訪問數據庫,其中還包含了業務計算。)
???下面給出DataRabbit 3.0的下載。
???關于DataRabbit的更多介紹請見:DataRabbit 輕量的數據訪問框架(00) -- 序
轉載于:https://www.cnblogs.com/zhuweisky/archive/2007/07/28/834387.html
總結
以上是生活随笔為你收集整理的DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个ListBox的相互操作
- 下一篇: 谁吃了我的CHM