博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XPO to Database Connectivity: Mastering Fork Etiquett
阅读量:4921 次
发布时间:2019-06-11

本文共 1280 字,大约阅读时间需要 4 分钟。

一般来说的废话,ASP.NET总是多用户访问的应用。这对IIS和ASP.NET不成问题,但是在默认情况下, XPO Data Layer 只创建一个数据库连接对象,那么当有2个用户同时访问数据库时,后一个用户则必须等待前一个用户的查询结束才能继续。

 

理论上我们可以为每一个Page甚至每一次用户访问都创建一个DataLayer,但创建DataLayer是一个相对昂贵的过程,这么做并不现实。如果能有一组数据库连接对象,并且让XPO自动选择第一个空闲的对象进行下一次查询则是个很棒的做法。

 

幸运的是, 已经可以处理一个被称为 DataStoreFork  的连接池。简单来说,我们可以创建一个  object array,初始化一个DataStoreFork,然后用他们构造一个ThreadSafeDataLayer即可。

 

 1 
//
 C#
 2 
IDataStore GetDataStore() {
 3 
    
string
 connStr 
=
 ConfigurationManager.ConnectionStrings[
"
PrimaryConnection
"
].ConnectionString;
 4 
    SqlConnection conn 
=
 
new
 SqlConnection(connStr);
 5 
    IDataStore store 
=
 
new
 MSSqlConnectionProvider(conn, AutoCreateOption.SchemaAlreadyExists);
 6 
    
return
 store;
 7 
}
 8 
 9 
IDataLayer GetDataLayer() {
10 
    ReflectionDictionary dict 
=
 
new
 ReflectionDictionary();
11 
    dict.CollectClassInfos(
typeof
(Person).Assembly);
12 
13 
    
const
 
int
 maxConnections 
=
 
3
;
14 
    IDataStore[] stores 
=
 
new
 IDataStore[maxConnections];
15 
    
for
(
int
 i 
=
 
0
; i 
<
 maxConnections; i
++
)
16 
        stores[i] 
=
 GetDataStore();
17 
18 
    
return
 
new
 ThreadSafeDataLayer(dict, 
new
 DataStoreFork(stores));
19 
}

 

 

注意其中的maxConnections不应该超过数据库服务器的CPU核心数。

 

另外,在一般的ASP.NET项目里,这么做并不会带来可观测到的性能提升。如果遭遇性能问题,不应该马上采用这种做法,而应先排除其他地方的性能瓶颈。

 

DataStoreFork更适用于其他一些如Web Service等多用户并发访问的场合。

 

 

转载于:https://www.cnblogs.com/Elvin/archive/2010/09/26/1836041.html

你可能感兴趣的文章
并查集
查看>>
centos 5.6 升级php到5.3
查看>>
Java两种延时——thread和timer
查看>>
让vim能完成代码提示~~
查看>>
【Android】java.lang.StackOverflowError: stack size 8MB
查看>>
12 个 CSS 高级技巧汇总
查看>>
Node.js 系列01
查看>>
源码下编译APK,却是总是提示,找不到符号:SystemProperties 。。。
查看>>
Apache Jmeter(1)
查看>>
Lattice Planner规划算法
查看>>
JS基础--问题记录
查看>>
简易代码生成器
查看>>
Spring对HibernateSession的管理之封装SessionFactory
查看>>
awk-使用
查看>>
maven常用命令
查看>>
WPF制作多语言版本的程序
查看>>
SpringBoot读取application.properties文件
查看>>
一篇linux的通讯文章
查看>>
关于oracle中对已建表格进行约束的一些操作
查看>>
如何在CRichEditCtrl控件中直接读如RTF格式的文件
查看>>