国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

XAF使用數據庫訪問層緩存的提升性能

2019-11-14 13:30:59
字體:
來源:轉載
供稿:網友

很多時候,為了提升性能,我們可以給數據庫訪問層做緩存。

以下幾步可以完成這個任務:
1. 使用自定義的 XPObjectSpacePRovider
1.1. 創建自定義的 XPObjectSpaceProvider 類,派生類中需要重寫CreateDataLayer 方法去創建一個 IDataLayer 對象,連接到 DataCacheNode
1.2. 讓XAF在 Xafapplication.CreateCustomObjectSpaceProvider 事件中,或重寫  theXafApplication.CreateDefaultObjectSpaceProvider 虛方法,文件在YourSolutionName/WxxApplication.xx 文件. 代碼差不多是這樣子的:

 

using DevExpress.ExpressApp.Xpo;using DevExpress.Xpo;using DevExpress.Xpo.DB;...public partial class SolutionWindowsFormsApplication : WxxApplication {    //...    protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) {        args.ObjectSpaceProvider = new CachedObjectSpaceProvider(args.ConnectionString, args.Connection);    }}...public class CachedObjectSpaceProvider : XPObjectSpaceProvider {    public CachedObjectSpaceProvider(string connectionString, IDbConnection connection)        : base(connectionString, connection) { }    public CachedObjectSpaceProvider(string connectionString, IDbConnection connection, bool threadSafe)        : base(connectionString, connection, threadSafe) { }    protected override DevExpress.Xpo.IDataLayer CreateDataLayer(IDataStore workingDataStore) {        DataCacheRoot cacheRoot = new DataCacheRoot(workingDataStore);        DataCacheNode cacheNode = new DataCacheNode(cacheRoot);        if (this.threadSafe) {            return new ThreadSafeDataLayer(this.XPDictionary, cacheNode, new Assembly[0]);        }        return new SimpleDataLayer(this.XPDictionary, cacheNode);    }}

以上文字是根據官方的翻譯的,這里是原文.

需要注意的是:這個緩存只能在web中使用,或者在如果你有多個web服務器連接到一臺DB時,也是不行的。

如有兩臺WEB,A,B 當A做了修改數據行為后,B服務器并不知道這個數據庫中的數據已經修改,所以B仍去緩存中讀取數據。

同樣的,Win程序的緩存是在客戶端電腦上的,所以也像多WEB一樣有問題。

我搜索了官方的解決方案:

當使用了SqlServer時,可以用Service Broker 查詢通知服務,進行通知客戶端。這是一個方向。由于我考慮兼容性,比如用Oracle或是別的庫時也想有這個樣的功能,所以沒有用這個。

查詢通知服務的介紹,官方的方案。

當然,如果你的web應用只是在一臺服務器上部署就不用考慮這個問題了。

 

另外官方還提供了另一種方法:

2.  使用 CachedDataStoreService

你的應用可以連接到數據緩存web services ,可以看這個鏈接: How to create a data caching service that helps improve performance in distributed applications 示例。

做到這一點必須在 XafApplication.ConnectionString 屬性指定有效的服務(webservices 或wcf)路徑

 

第2種方法不存在多服務器、win的緩存更新問題。這個感覺更好一些,不過一直沒有試過。

 

另外,說起性能問題,我曾經遇到過win2008-win2012 比Win7 開發環境慢很多的現象,做了N個系統、經過N天的實驗發現,原來是因為這些系統電源選項默認為節能,修改為高性能后,效果顯著。


參見:

session Management and Caching 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密山市| 罗平县| 乃东县| 乐业县| 涟水县| 舒城县| 阳新县| 石柱| 抚州市| 遵义市| 玉树县| 四会市| 深水埗区| 永州市| 八宿县| 梓潼县| 赤水市| 鹤岗市| 手机| 广宁县| 东光县| 乐昌市| 垫江县| 屏东市| 四平市| 水富县| 泰和县| 德江县| 万源市| 宁远县| 泉州市| 麻城市| 汝南县| 景德镇市| 湘乡市| 读书| 佳木斯市| 唐海县| 福清市| 长寿区| 蓬溪县|