麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

XAF使用數(shù)據(jù)庫訪問層緩存的提升性能

2019-11-14 13:30:59
字體:
供稿:網(wǎng)友

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

以下幾步可以完成這個任務(wù):
1. 使用自定義的 XPObjectSpacePRovider
1.1. 創(chuàng)建自定義的 XPObjectSpaceProvider 類,派生類中需要重寫CreateDataLayer 方法去創(chuàng)建一個 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);    }}

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

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

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

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

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

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

查詢通知服務(wù)的介紹,官方的方案。

當(dāng)然,如果你的web應(yīng)用只是在一臺服務(wù)器上部署就不用考慮這個問題了。

 

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

2.  使用 CachedDataStoreService

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

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

 

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

 

另外,說起性能問題,我曾經(jīng)遇到過win2008-win2012 比Win7 開發(fā)環(huán)境慢很多的現(xiàn)象,做了N個系統(tǒng)、經(jīng)過N天的實(shí)驗(yàn)發(fā)現(xiàn),原來是因?yàn)檫@些系統(tǒng)電源選項(xiàng)默認(rèn)為節(jié)能,修改為高性能后,效果顯著。


參見:

session Management and Caching 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色女人在线 | h视频免费在线观看 | 91精品国产综合久久久欧美 | 精品成人久久久 | 国产69精品久久久久久野外 | 欧美成人免费在线视频 | 日韩午夜一区二区三区 | 国产亚洲美女精品久久久2020 | 色的综合| 国产精品视频自拍 | 亚洲三区精品 | 午夜小网站 | 一级免费在线 | 国产一区二区不卡视频 | 久久久久久久久久一本门道91 | 久草在线视频在线 | 最新在线中文字幕 | 欧美一级美国一级 | 国产88久久久国产精品免费二区 | 精品久久久久久综合日本 | 日韩av成人 | 免费观看一区二区三区视频 | 色就操 | 少妇一级淫片免费放正片 | 国产日韩线路一线路二 | 91精品免费在线 | 中文字幕在线观看1 | 成人午夜免费网站 | 亚洲一区动漫 | 国产精选电影免费在线观看 | 男女羞羞视频在线观看免费 | 精品国产欧美一区二区 | 青热久思思 | 免费在线性爱视频 | 欧美一级淫片007 | h视频免费观看 | 99国产精品自拍 | 久久国产精品91 | 国产精品白嫩白嫩大学美女 | 欧美成人精品不卡视频在线观看 | 精品中文字幕久久久久四十五十骆 |