Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Dapper
提交
724caf1e
D
Dapper
项目概览
int
/
Dapper
大约 1 年 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dapper
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
724caf1e
编写于
7月 22, 2011
作者:
M
mgravell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cache query methods
上级
50131437
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
85 addition
and
41 deletion
+85
-41
Dapper/SqlMapper.cs
Dapper/SqlMapper.cs
+85
-41
未找到文件。
Dapper/SqlMapper.cs
浏览文件 @
724caf1e
...
...
@@ -110,6 +110,9 @@ class CacheInfo
public
object
Deserializer
{
get
;
set
;
}
public
object
[]
OtherDeserializers
{
get
;
set
;
}
public
Action
<
IDbCommand
,
object
>
ParamReader
{
get
;
set
;
}
private
int
hitCount
;
public
int
GetHitCount
()
{
return
Interlocked
.
CompareExchange
(
ref
hitCount
,
0
,
0
);
}
public
void
RecordHit
()
{
Interlocked
.
Increment
(
ref
hitCount
);
}
}
#if CSHARP30
private
static
readonly
Dictionary
<
Identity
,
CacheInfo
>
_queryCache
=
new
Dictionary
<
Identity
,
CacheInfo
>();
...
...
@@ -136,54 +139,95 @@ private static void SetQueryCache(Identity key, CacheInfo value)
}
private
static
bool
TryGetQueryCache
(
Identity
key
,
out
CacheInfo
value
)
{
return
_queryCache
.
TryGetValue
(
key
,
out
value
);
if
(
_queryCache
.
TryGetValue
(
key
,
out
value
))
{
value
.
RecordHit
();
return
true
;
}
value
=
null
;
return
false
;
}
private
static
void
PurgeQueryCache
(
Identity
key
)
{
CacheInfo
info
;
_queryCache
.
TryRemove
(
key
,
out
info
);
}
public
static
int
GetCachedSQLCount
()
{
return
_queryCache
.
Count
;
}
public
static
IEnumerable
<
Tuple
<
string
,
string
,
int
>>
GetCachedSQL
(
int
ignoreHitCountAbove
=
int
.
MaxValue
)
{
var
data
=
_queryCache
.
Select
(
pair
=>
Tuple
.
Create
(
pair
.
Key
.
connectionString
,
pair
.
Key
.
sql
,
pair
.
Value
.
GetHitCount
()));
if
(
ignoreHitCountAbove
<
int
.
MaxValue
)
data
=
data
.
Where
(
tuple
=>
tuple
.
Item3
<=
ignoreHitCountAbove
);
return
data
;
}
public
static
IEnumerable
<
Tuple
<
int
,
int
>>
GetHashCollissions
()
{
var
counts
=
new
Dictionary
<
int
,
int
>();
foreach
(
var
key
in
_queryCache
.
Keys
)
{
int
count
;
if
(!
counts
.
TryGetValue
(
key
.
hashCode
,
out
count
))
{
counts
.
Add
(
key
.
hashCode
,
1
);
}
else
{
counts
[
key
.
hashCode
]
=
count
+
1
;
}
}
return
from
pair
in
counts
where
pair
.
Value
>
1
select
Tuple
.
Create
(
pair
.
Key
,
pair
.
Value
);
}
#endif
static
readonly
Dictionary
<
RuntimeTypeHandle
,
DbType
>
typeMap
;
static
readonly
Dictionary
<
Type
,
DbType
>
typeMap
;
static
SqlMapper
()
{
typeMap
=
new
Dictionary
<
RuntimeTypeHandl
e
,
DbType
>();
typeMap
[
typeof
(
byte
)
.
TypeHandle
]
=
DbType
.
Byte
;
typeMap
[
typeof
(
sbyte
)
.
TypeHandle
]
=
DbType
.
SByte
;
typeMap
[
typeof
(
short
)
.
TypeHandle
]
=
DbType
.
Int16
;
typeMap
[
typeof
(
ushort
)
.
TypeHandle
]
=
DbType
.
UInt16
;
typeMap
[
typeof
(
int
)
.
TypeHandle
]
=
DbType
.
Int32
;
typeMap
[
typeof
(
uint
)
.
TypeHandle
]
=
DbType
.
UInt32
;
typeMap
[
typeof
(
long
)
.
TypeHandle
]
=
DbType
.
Int64
;
typeMap
[
typeof
(
ulong
)
.
TypeHandle
]
=
DbType
.
UInt64
;
typeMap
[
typeof
(
float
)
.
TypeHandle
]
=
DbType
.
Single
;
typeMap
[
typeof
(
double
)
.
TypeHandle
]
=
DbType
.
Double
;
typeMap
[
typeof
(
decimal
)
.
TypeHandle
]
=
DbType
.
Decimal
;
typeMap
[
typeof
(
bool
)
.
TypeHandle
]
=
DbType
.
Boolean
;
typeMap
[
typeof
(
string
)
.
TypeHandle
]
=
DbType
.
String
;
typeMap
[
typeof
(
char
)
.
TypeHandle
]
=
DbType
.
StringFixedLength
;
typeMap
[
typeof
(
Guid
)
.
TypeHandle
]
=
DbType
.
Guid
;
typeMap
[
typeof
(
DateTime
)
.
TypeHandle
]
=
DbType
.
DateTime
;
typeMap
[
typeof
(
DateTimeOffset
)
.
TypeHandle
]
=
DbType
.
DateTimeOffset
;
typeMap
[
typeof
(
byte
[])
.
TypeHandle
]
=
DbType
.
Binary
;
typeMap
[
typeof
(
byte
?)
.
TypeHandle
]
=
DbType
.
Byte
;
typeMap
[
typeof
(
sbyte
?)
.
TypeHandle
]
=
DbType
.
SByte
;
typeMap
[
typeof
(
short
?)
.
TypeHandle
]
=
DbType
.
Int16
;
typeMap
[
typeof
(
ushort
?)
.
TypeHandle
]
=
DbType
.
UInt16
;
typeMap
[
typeof
(
int
?)
.
TypeHandle
]
=
DbType
.
Int32
;
typeMap
[
typeof
(
uint
?)
.
TypeHandle
]
=
DbType
.
UInt32
;
typeMap
[
typeof
(
long
?)
.
TypeHandle
]
=
DbType
.
Int64
;
typeMap
[
typeof
(
ulong
?)
.
TypeHandle
]
=
DbType
.
UInt64
;
typeMap
[
typeof
(
float
?)
.
TypeHandle
]
=
DbType
.
Single
;
typeMap
[
typeof
(
double
?)
.
TypeHandle
]
=
DbType
.
Double
;
typeMap
[
typeof
(
decimal
?)
.
TypeHandle
]
=
DbType
.
Decimal
;
typeMap
[
typeof
(
bool
?)
.
TypeHandle
]
=
DbType
.
Boolean
;
typeMap
[
typeof
(
char
?)
.
TypeHandle
]
=
DbType
.
StringFixedLength
;
typeMap
[
typeof
(
Guid
?)
.
TypeHandle
]
=
DbType
.
Guid
;
typeMap
[
typeof
(
DateTime
?)
.
TypeHandle
]
=
DbType
.
DateTime
;
typeMap
[
typeof
(
DateTimeOffset
?)
.
TypeHandle
]
=
DbType
.
DateTimeOffset
;
typeMap
[
typeof
(
System
.
Data
.
Linq
.
Binary
)
.
TypeHandle
]
=
DbType
.
Binary
;
typeMap
=
new
Dictionary
<
Typ
e
,
DbType
>();
typeMap
[
typeof
(
byte
)]
=
DbType
.
Byte
;
typeMap
[
typeof
(
sbyte
)]
=
DbType
.
SByte
;
typeMap
[
typeof
(
short
)]
=
DbType
.
Int16
;
typeMap
[
typeof
(
ushort
)]
=
DbType
.
UInt16
;
typeMap
[
typeof
(
int
)]
=
DbType
.
Int32
;
typeMap
[
typeof
(
uint
)]
=
DbType
.
UInt32
;
typeMap
[
typeof
(
long
)]
=
DbType
.
Int64
;
typeMap
[
typeof
(
ulong
)]
=
DbType
.
UInt64
;
typeMap
[
typeof
(
float
)]
=
DbType
.
Single
;
typeMap
[
typeof
(
double
)]
=
DbType
.
Double
;
typeMap
[
typeof
(
decimal
)]
=
DbType
.
Decimal
;
typeMap
[
typeof
(
bool
)]
=
DbType
.
Boolean
;
typeMap
[
typeof
(
string
)]
=
DbType
.
String
;
typeMap
[
typeof
(
char
)]
=
DbType
.
StringFixedLength
;
typeMap
[
typeof
(
Guid
)]
=
DbType
.
Guid
;
typeMap
[
typeof
(
DateTime
)]
=
DbType
.
DateTime
;
typeMap
[
typeof
(
DateTimeOffset
)]
=
DbType
.
DateTimeOffset
;
typeMap
[
typeof
(
byte
[])]
=
DbType
.
Binary
;
typeMap
[
typeof
(
byte
?)]
=
DbType
.
Byte
;
typeMap
[
typeof
(
sbyte
?)]
=
DbType
.
SByte
;
typeMap
[
typeof
(
short
?)]
=
DbType
.
Int16
;
typeMap
[
typeof
(
ushort
?)]
=
DbType
.
UInt16
;
typeMap
[
typeof
(
int
?)]
=
DbType
.
Int32
;
typeMap
[
typeof
(
uint
?)]
=
DbType
.
UInt32
;
typeMap
[
typeof
(
long
?)]
=
DbType
.
Int64
;
typeMap
[
typeof
(
ulong
?)]
=
DbType
.
UInt64
;
typeMap
[
typeof
(
float
?)]
=
DbType
.
Single
;
typeMap
[
typeof
(
double
?)]
=
DbType
.
Double
;
typeMap
[
typeof
(
decimal
?)]
=
DbType
.
Decimal
;
typeMap
[
typeof
(
bool
?)]
=
DbType
.
Boolean
;
typeMap
[
typeof
(
char
?)]
=
DbType
.
StringFixedLength
;
typeMap
[
typeof
(
Guid
?)]
=
DbType
.
Guid
;
typeMap
[
typeof
(
DateTime
?)]
=
DbType
.
DateTime
;
typeMap
[
typeof
(
DateTimeOffset
?)]
=
DbType
.
DateTimeOffset
;
typeMap
[
typeof
(
System
.
Data
.
Linq
.
Binary
)]
=
DbType
.
Binary
;
}
private
static
DbType
LookupDbType
(
Type
type
,
string
name
)
...
...
@@ -195,7 +239,7 @@ private static DbType LookupDbType(Type type, string name)
{
type
=
Enum
.
GetUnderlyingType
(
type
);
}
if
(
typeMap
.
TryGetValue
(
type
.
TypeHandle
,
out
dbType
))
if
(
typeMap
.
TryGetValue
(
type
,
out
dbType
))
{
return
dbType
;
}
...
...
@@ -256,9 +300,9 @@ public override bool Equals(object obj)
}
internal
readonly
string
sql
;
internal
readonly
CommandType
?
commandType
;
private
readonly
int
hashCode
,
gridIndex
;
internal
readonly
int
hashCode
,
gridIndex
;
private
readonly
Type
type
;
private
readonly
string
connectionString
;
internal
readonly
string
connectionString
;
internal
readonly
Type
parametersType
;
public
override
int
GetHashCode
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录