Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cdy816
Mars
提交
82348776
Mars
项目概览
cdy816
/
Mars
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
82348776
编写于
8月 09, 2020
作者:
cdy816
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成运行时,不停止的情况下,重新加载数据库功能。同时修改由于增加改功能,导致数据库多变量时采集不可用。
上级
ad87b462
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
609 addition
and
62 deletion
+609
-62
Common/Cdy.Tag.Common/Common/FixedMemoryBlock.cs
Common/Cdy.Tag.Common/Common/FixedMemoryBlock.cs
+64
-7
Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs
Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs
+15
-0
Common/Cdy.Tag.Common/Common/MemoryBlock.cs
Common/Cdy.Tag.Common/Common/MemoryBlock.cs
+1
-1
Common/Cdy.Tag/Real/RealDatabase.cs
Common/Cdy.Tag/Real/RealDatabase.cs
+2
-2
Common/Cdy.Tag/Real/RealDatabaseSerise.cs
Common/Cdy.Tag/Real/RealDatabaseSerise.cs
+0
-2
Mars.sln
Mars.sln
+8
-1
RunTime/DBInRun/Program.cs
RunTime/DBInRun/Program.cs
+5
-0
RunTime/DBRuntime.Real/Real/RealEnginer.cs
RunTime/DBRuntime.Real/Real/RealEnginer.cs
+153
-21
RunTime/DBRuntime/His/New/Compress/CompressEnginer2.cs
RunTime/DBRuntime/His/New/Compress/CompressEnginer2.cs
+48
-2
RunTime/DBRuntime/His/New/Compress/CompressMemory2.cs
RunTime/DBRuntime/His/New/Compress/CompressMemory2.cs
+1
-1
RunTime/DBRuntime/His/New/HisDataMemoryBlock.cs
RunTime/DBRuntime/His/New/HisDataMemoryBlock.cs
+1
-1
RunTime/DBRuntime/His/New/HisDataMemoryBlockCollection.cs
RunTime/DBRuntime/His/New/HisDataMemoryBlockCollection.cs
+11
-8
RunTime/DBRuntime/His/New/HisEnginer2.cs
RunTime/DBRuntime/His/New/HisEnginer2.cs
+150
-13
RunTime/DBRuntime/His/New/LogManager2.cs
RunTime/DBRuntime/His/New/LogManager2.cs
+1
-0
RunTime/DBRuntime/His/New/SeriseEnginer2.cs
RunTime/DBRuntime/His/New/SeriseEnginer2.cs
+1
-1
RunTime/DBRuntime/His/New/TimerMemoryCacheProcesser2.cs
RunTime/DBRuntime/His/New/TimerMemoryCacheProcesser2.cs
+6
-0
RunTime/DBRuntime/His/New/ValueChangedMemoryCacheProcesser2.cs
...me/DBRuntime/His/New/ValueChangedMemoryCacheProcesser2.cs
+10
-1
RunTime/DBRuntime/His/Serise/SeriseEnginer.cs
RunTime/DBRuntime/His/Serise/SeriseEnginer.cs
+1
-1
RunTime/DBRuntime/Runner.cs
RunTime/DBRuntime/Runner.cs
+63
-0
RunTime/DBRuntimeTests/DBRuntimeTests.csproj
RunTime/DBRuntimeTests/DBRuntimeTests.csproj
+20
-0
RunTime/DBRuntimeTests/His/New/HisDataMemoryBlockCollectionTests.cs
...RuntimeTests/His/New/HisDataMemoryBlockCollectionTests.cs
+48
-0
未找到文件。
Common/Cdy.Tag.Common/Common/FixedMemoryBlock.cs
浏览文件 @
82348776
...
...
@@ -172,7 +172,9 @@ namespace Cdy.Tag
public
void
IncRef
()
{
lock
(
mUserSizeLock
)
Interlocked
.
Increment
(
ref
mRefCount
);
{
mRefCount
++;
}
}
/// <summary>
...
...
@@ -221,7 +223,8 @@ namespace Cdy.Tag
private
void
Init
(
long
size
)
{
mBuffers
=
new
byte
[
size
];
mHandles
=
System
.
Runtime
.
InteropServices
.
Marshal
.
UnsafeAddrOfPinnedArrayElement
(
mBuffers
,
0
);
mHandles
=
(
IntPtr
)
mBuffers
.
AsMemory
().
Pin
().
Pointer
;
//mHandles = System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(mBuffers, 0);
mAllocSize
=
size
;
}
...
...
@@ -244,7 +247,6 @@ namespace Cdy.Tag
public
void
ReAlloc
(
long
size
)
{
Init
(
size
);
GC
.
Collect
();
}
/// <summary>
...
...
@@ -252,9 +254,7 @@ namespace Cdy.Tag
/// </summary>
public
void
Clear
()
{
mBuffers
.
AsSpan
().
Fill
(
0
);
LoggerService
.
Service
.
Info
(
"FixedMemoryBlock"
,
Name
+
" is clear !"
);
Array
.
Clear
(
this
.
Buffers
,
0
,
Buffers
.
Length
);
}
...
...
@@ -1002,7 +1002,7 @@ namespace Cdy.Tag
{
//mDataBuffer = null;
mBuffers
=
null
;
LoggerService
.
Service
.
Erro
(
"FixedMemoryBlock"
,
Name
+
" Disposed "
);
//
LoggerService.Service.Erro("FixedMemoryBlock", Name + " Disposed ");
//GC.Collect();
}
...
...
@@ -1385,6 +1385,63 @@ namespace Cdy.Tag
// stream.Flush();
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
/// <param name="stream"></param>
public
static
void
RecordToLog2
(
this
FixedMemoryBlock
memory
,
Stream
stream
)
{
stream
.
Write
(
memory
.
Buffers
,
0
,
memory
.
Buffers
.
Length
);
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
/// <param name="fileName"></param>
public
static
void
Dump
(
this
FixedMemoryBlock
memory
,
string
fileName
)
{
using
(
var
stream
=
System
.
IO
.
File
.
Open
(
fileName
,
FileMode
.
OpenOrCreate
,
FileAccess
.
ReadWrite
,
FileShare
.
ReadWrite
))
{
stream
.
Write
(
memory
.
Buffers
,
0
,
memory
.
Buffers
.
Length
);
stream
.
Flush
();
}
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
/// <param name="stream"></param>
public
static
void
Dump
(
this
FixedMemoryBlock
memory
,
Stream
stream
)
{
stream
.
Write
(
memory
.
Buffers
,
0
,
memory
.
Buffers
.
Length
);
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
/// <param name="time"></param>
public
static
void
Dump
(
this
FixedMemoryBlock
memory
,
DateTime
time
)
{
string
fileName
=
memory
.
Name
+
"_"
+
time
.
ToString
(
"yyyy_MM_dd_HH_mm_ss"
)
+
".dmp"
;
fileName
=
System
.
IO
.
Path
.
Combine
(
System
.
IO
.
Path
.
GetDirectoryName
(
typeof
(
MarshalFixedMemoryBlock
).
Assembly
.
Location
),
fileName
);
Dump
(
memory
,
fileName
);
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
public
static
void
Dump
(
this
FixedMemoryBlock
memory
)
{
string
fileName
=
memory
.
Name
+
"_"
+
DateTime
.
Now
.
ToString
(
"yyyy_MM_dd_HH_mm_ss"
)
+
".dmp"
;
fileName
=
System
.
IO
.
Path
.
Combine
(
System
.
IO
.
Path
.
GetDirectoryName
(
typeof
(
MarshalFixedMemoryBlock
).
Assembly
.
Location
),
fileName
);
Dump
(
memory
,
fileName
);
}
/// <summary>
///
/// </summary>
...
...
Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs
浏览文件 @
82348776
...
...
@@ -1610,6 +1610,21 @@ namespace Cdy.Tag
// stream.Flush();
}
public
static
void
RecordToLog2
(
this
MarshalFixedMemoryBlock
memory
,
Stream
stream
)
{
int
ltmp
=
(
int
)
memory
.
AllocSize
;
var
source
=
memory
.
Handles
;
var
bvals
=
ArrayPool
<
byte
>.
Shared
.
Rent
(
ltmp
);
while
(
ltmp
>
0
)
{
int
ctmp
=
Math
.
Min
(
bvals
.
Length
,
ltmp
);
Marshal
.
Copy
(
source
,
bvals
,
0
,
ctmp
);
stream
.
Write
(
bvals
,
0
,
ctmp
);
}
ArrayPool
<
byte
>.
Shared
.
Return
(
bvals
);
}
/// <summary>
///
/// </summary>
...
...
Common/Cdy.Tag.Common/Common/MemoryBlock.cs
浏览文件 @
82348776
...
...
@@ -350,7 +350,7 @@ namespace Cdy.Tag
mAllocSize
=
size
;
//GC.Collect();
LoggerService
.
Service
.
Info
(
"
CheckAndResize
"
,
"CheckAndResize "
+
this
.
Name
+
" "
+
size
,
ConsoleColor
.
Red
);
LoggerService
.
Service
.
Info
(
"
MemoryBlock
"
,
"CheckAndResize "
+
this
.
Name
+
" "
+
size
,
ConsoleColor
.
Red
);
}
else
{
...
...
Common/Cdy.Tag/Real/RealDatabase.cs
浏览文件 @
82348776
...
...
@@ -68,9 +68,9 @@ namespace Cdy.Tag
NamedTags
.
Clear
();
foreach
(
var
vv
in
Tags
)
{
if
(!
NamedTags
.
ContainsKey
(
vv
.
Value
.
Name
))
if
(!
NamedTags
.
ContainsKey
(
vv
.
Value
.
Full
Name
))
{
NamedTags
.
Add
(
vv
.
Value
.
Name
,
vv
.
Value
);
NamedTags
.
Add
(
vv
.
Value
.
Full
Name
,
vv
.
Value
);
}
}
}
...
...
Common/Cdy.Tag/Real/RealDatabaseSerise.cs
浏览文件 @
82348776
...
...
@@ -81,8 +81,6 @@ namespace Cdy.Tag
db
.
Name
=
xe
.
Attribute
(
"Name"
).
Value
;
db
.
Version
=
xe
.
Attribute
(
"Version"
).
Value
;
Dictionary
<
string
,
TagGroup
>
groups
=
new
Dictionary
<
string
,
TagGroup
>();
Dictionary
<
TagGroup
,
string
>
parents
=
new
Dictionary
<
TagGroup
,
string
>();
if
(
xe
.
Element
(
"Groups"
)!=
null
)
...
...
Mars.sln
浏览文件 @
82348776
...
...
@@ -77,7 +77,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Consumer", "Consumer", "{72
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HighSpeedApiDemo", "Example\Consumer\HighSpeedApiDemo\HighSpeedApiDemo.csproj", "{319E920E-9017-4B50-BBC3-D71D546B7DB2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpiderDriverDemo", "Example\Producter\SpiderDriverDemo\SpiderDriverDemo.csproj", "{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpiderDriverDemo", "Example\Producter\SpiderDriverDemo\SpiderDriverDemo.csproj", "{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBRuntimeTests", "RunTime\DBRuntimeTests\DBRuntimeTests.csproj", "{8E64B132-719D-4DBF-925C-F33B42A0B29E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -197,6 +199,10 @@ Global
{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4}.Release|Any CPU.Build.0 = Release|Any CPU
{8E64B132-719D-4DBF-925C-F33B42A0B29E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E64B132-719D-4DBF-925C-F33B42A0B29E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E64B132-719D-4DBF-925C-F33B42A0B29E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E64B132-719D-4DBF-925C-F33B42A0B29E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
...
...
@@ -232,6 +238,7 @@ Global
{723CADA9-2D52-4F05-9661-1655F8182084} = {B48ACA8E-45C0-4F17-9638-5CEAC9E5A185}
{319E920E-9017-4B50-BBC3-D71D546B7DB2} = {723CADA9-2D52-4F05-9661-1655F8182084}
{D30BF45C-2F6F-4A36-BDEB-761DE11AF3A4} = {4DA41AEA-AE61-458B-B516-EE6BDDE180E2}
{8E64B132-719D-4DBF-925C-F33B42A0B29E} = {1A69E6A7-33B3-4DAF-9D9D-FD7CD474FFD3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {577CCEC3-4CDB-458A-B93D-F8579C2C3D8F}
...
...
RunTime/DBInRun/Program.cs
浏览文件 @
82348776
...
...
@@ -88,6 +88,11 @@ namespace DBInRun
case
"stop"
:
Cdy
.
Tag
.
Runner
.
RunInstance
.
Stop
();
break
;
case
"restart"
:
Task
.
Run
(()
=>
{
Cdy
.
Tag
.
Runner
.
RunInstance
.
ReStartDatabase
();
});
break
;
case
"h"
:
Console
.
WriteLine
(
GetHelpString
());
break
;
...
...
RunTime/DBRuntime.Real/Real/RealEnginer.cs
浏览文件 @
82348776
此差异已折叠。
点击以展开。
RunTime/DBRuntime/His/New/Compress/CompressEnginer2.cs
浏览文件 @
82348776
...
...
@@ -10,6 +10,7 @@ using DBRuntime.His;
using
System
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
...
...
@@ -47,6 +48,7 @@ namespace Cdy.Tag
//private long mTotalSize = 0;
private
int
mLastDataRegionId
;
#
endregion
...
Variables
...
...
...
@@ -91,7 +93,7 @@ namespace Cdy.Tag
var
histag
=
mHisTagService
.
ListAllTags
();
//计算数据区域个数
var
mLastDataRegionId
=
-
1
;
mLastDataRegionId
=
-
1
;
foreach
(
var
vv
in
histag
)
{
var
id
=
vv
.
Id
;
...
...
@@ -110,6 +112,34 @@ namespace Cdy.Tag
}
}
/// <summary>
///
/// </summary>
/// <param name="tags"></param>
public
void
ReSizeTagCompress
(
List
<
HisTag
>
tags
)
{
List
<
CompressMemory2
>
ctmp
=
new
List
<
CompressMemory2
>();
ctmp
.
Add
(
mTargetMemorys
.
Last
().
Value
);
foreach
(
var
vv
in
tags
)
{
var
id
=
vv
.
Id
;
var
did
=
id
/
TagCountOneFile
;
if
(
mLastDataRegionId
!=
did
)
{
var
vvv
=
new
CompressMemory2
()
{
Id
=
did
,
Name
=
"CompressTarget"
+
did
};
mTargetMemorys
.
Add
(
did
,
vvv
);
mLastDataRegionId
=
did
;
ctmp
.
Add
(
vvv
);
}
}
foreach
(
var
vv
in
ctmp
)
{
vv
.
ReInit
(
ServiceLocator
.
Locator
.
Resolve
<
IHisEngine2
>().
CurrentMemory
);
}
}
/// <summary>
///
/// </summary>
...
...
@@ -165,6 +195,8 @@ namespace Cdy.Tag
resetEvent
.
Set
();
}
/// <summary>
///
/// </summary>
...
...
@@ -181,6 +213,19 @@ namespace Cdy.Tag
return
false
;
}
/// <summary>
/// 等待空闲
/// </summary>
public
void
WaitForReady
()
{
while
(
CheckIsBusy
())
{
Thread
.
Sleep
(
10
);
}
}
/// <summary>
///
/// </summary>
...
...
@@ -216,7 +261,8 @@ namespace Cdy.Tag
mm
.
Value
.
Compress
(
sm
);
});
ServiceLocator
.
Locator
.
Resolve
<
IHisEngine2
>().
ClearMemoryHisData
(
sm
);
sm
.
Clear
();
// ServiceLocator.Locator.Resolve<IHisEngine2>().ClearMemoryHisData(sm);
sm
.
MakeMemoryNoBusy
();
ServiceLocator
.
Locator
.
Resolve
<
IDataSerialize2
>().
RequestToSave
();
...
...
RunTime/DBRuntime/His/New/Compress/CompressMemory2.cs
浏览文件 @
82348776
...
...
@@ -226,7 +226,7 @@ namespace Cdy.Tag
//更新指针区域
this
.
WriteInt
(
0
,
(
int
)
datasize
);
this
.
Write
((
int
)
source
.
TagAddres
s
.
Count
);
this
.
Write
((
int
)
mTagId
s
.
Count
);
long
ltmp2
=
sw
.
ElapsedMilliseconds
;
...
...
RunTime/DBRuntime/His/New/HisDataMemoryBlock.cs
浏览文件 @
82348776
...
...
@@ -17,7 +17,7 @@ namespace DBRuntime.His
/// <summary>
///
/// </summary>
public
class
HisDataMemoryBlock
:
Marshal
FixedMemoryBlock
public
class
HisDataMemoryBlock
:
FixedMemoryBlock
{
#
region
...
Variables
...
...
...
RunTime/DBRuntime/His/New/HisDataMemoryBlockCollection.cs
浏览文件 @
82348776
...
...
@@ -26,7 +26,7 @@ namespace DBRuntime.His
#
region
...
Variables
...
private
SortedDictionary
<
int
,
HisDataMemoryBlock
>
mTagAddress
=
new
Sorted
Dictionary
<
int
,
HisDataMemoryBlock
>();
private
Dictionary
<
int
,
HisDataMemoryBlock
>
mTagAddress
=
new
Dictionary
<
int
,
HisDataMemoryBlock
>();
private
int
mRefCount
=
0
;
...
...
@@ -58,7 +58,7 @@ namespace DBRuntime.His
/// 变量内存地址缓存
/// Tuple 每项的含义:起始地址,值地址偏移,质量地址偏移,数据大小
/// </summary>
public
Sorted
Dictionary
<
int
,
HisDataMemoryBlock
>
TagAddress
public
Dictionary
<
int
,
HisDataMemoryBlock
>
TagAddress
{
get
{
...
...
@@ -88,7 +88,8 @@ namespace DBRuntime.His
/// </summary>
public
void
IncRef
()
{
Interlocked
.
Increment
(
ref
mRefCount
);
lock
(
mUserSizeLock
)
mRefCount
++;
}
/// <summary>
...
...
@@ -116,9 +117,9 @@ namespace DBRuntime.His
/// <param name=""></param>
public
void
AddTagAddress
(
int
id
,
HisDataMemoryBlock
block
)
{
if
(!
TagAddress
.
ContainsKey
(
id
))
if
(!
m
TagAddress
.
ContainsKey
(
id
))
{
TagAddress
.
Add
(
id
,
block
);
m
TagAddress
.
Add
(
id
,
block
);
}
}
...
...
@@ -128,9 +129,9 @@ namespace DBRuntime.His
/// <param name="id"></param>
public
void
RemoveTagAdress
(
int
id
)
{
if
(
TagAddress
.
ContainsKey
(
id
))
if
(
m
TagAddress
.
ContainsKey
(
id
))
{
TagAddress
.
Remove
(
id
);
m
TagAddress
.
Remove
(
id
);
}
}
...
...
@@ -139,6 +140,7 @@ namespace DBRuntime.His
/// </summary>
public
void
Clear
()
{
if
(
TagAddress
==
null
)
return
;
foreach
(
var
vv
in
TagAddress
)
{
vv
.
Value
.
Clear
();
...
...
@@ -150,6 +152,7 @@ namespace DBRuntime.His
/// </summary>
public
void
Dispose
()
{
while
(
this
.
IsBusy
())
Thread
.
Sleep
(
1
);
foreach
(
var
vv
in
mTagAddress
)
vv
.
Value
.
Dispose
();
mTagAddress
.
Clear
();
...
...
@@ -176,7 +179,7 @@ namespace DBRuntime.His
{
foreach
(
var
vv
in
memory
.
TagAddress
)
{
vv
.
Value
.
RecordToLog
(
stream
);
vv
.
Value
.
RecordToLog
2
(
stream
);
}
}
...
...
RunTime/DBRuntime/His/New/HisEnginer2.cs
浏览文件 @
82348776
...
...
@@ -221,8 +221,8 @@ namespace Cdy.Tag
if
(
mRealEnginer
!=
null
)
{
if
(
mManager
==
null
)
mManager
=
new
Cdy
.
Tag
.
HisDatabaseSerise
().
Load
();
//
if (mManager == null)
//
mManager = new Cdy.Tag.HisDatabaseSerise().Load();
mLastProcesser
=
new
TimerMemoryCacheProcesser2
()
{
Id
=
0
};
mRecordTimerProcesser
.
Clear
();
...
...
@@ -315,6 +315,154 @@ namespace Cdy.Tag
AllocMemory
();
}
/// <summary>
///
/// </summary>
public
void
Pause
()
{
mRecordTimer
.
Stop
();
}
/// <summary>
///
/// </summary>
public
void
Resume
()
{
mRecordTimer
.
Start
();
}
/// <summary>
/// 加载使能新的变量
/// </summary>
/// <param name="tags"></param>
/// <param name="mHisDatabase"></param>
public
void
ReLoadTags
(
IEnumerable
<
Tag
.
HisTag
>
tags
,
HisDatabase
mHisDatabase
)
{
mRecordTimer
.
Stop
();
var
realbaseaddr
=
this
.
mRealEnginer
.
Memory
;
IntPtr
realHandle
=
mRealEnginer
.
MemoryHandle
;
HisRunTag
mHisTag
=
null
;
Tagbase
mRealTag
;
var
histags
=
new
List
<
HisRunTag
>();
foreach
(
var
vv
in
tags
)
{
var
realaddr
=
(
int
)
mRealEnginer
.
GetDataAddr
((
int
)
vv
.
Id
);
mRealTag
=
mRealEnginer
.
GetTagById
(
vv
.
Id
);
switch
(
vv
.
TagType
)
{
case
Cdy
.
Tag
.
TagType
.
Bool
:
case
Cdy
.
Tag
.
TagType
.
Byte
:
mHisTag
=
new
ByteHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
Short
:
case
Cdy
.
Tag
.
TagType
.
UShort
:
mHisTag
=
new
ShortHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
Int
:
case
Cdy
.
Tag
.
TagType
.
UInt
:
mHisTag
=
new
IntHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
Long
:
case
Cdy
.
Tag
.
TagType
.
ULong
:
mHisTag
=
new
LongHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
Float
:
mHisTag
=
new
FloatHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
,
Precision
=
(
mRealTag
as
FloatTag
).
Precision
};
break
;
case
Cdy
.
Tag
.
TagType
.
Double
:
mHisTag
=
new
DoubleHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
,
Precision
=
(
mRealTag
as
DoubleTag
).
Precision
};
break
;
case
Cdy
.
Tag
.
TagType
.
DateTime
:
mHisTag
=
new
DateTimeHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
String
:
mHisTag
=
new
StirngHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
UIntPoint
:
case
Cdy
.
Tag
.
TagType
.
IntPoint
:
mHisTag
=
new
IntPointHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
UIntPoint3
:
case
Cdy
.
Tag
.
TagType
.
IntPoint3
:
mHisTag
=
new
IntPoint3HisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
ULongPoint
:
case
Cdy
.
Tag
.
TagType
.
LongPoint
:
mHisTag
=
new
LongPointHisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
case
Cdy
.
Tag
.
TagType
.
ULongPoint3
:
case
Cdy
.
Tag
.
TagType
.
LongPoint3
:
mHisTag
=
new
LongPoint3HisRunTag
()
{
Id
=
vv
.
Id
,
Circle
=
vv
.
Circle
,
Type
=
vv
.
Type
,
TagType
=
vv
.
TagType
,
RealMemoryAddr
=
realbaseaddr
,
RealMemoryPtr
=
realHandle
,
RealValueAddr
=
realaddr
,
CompressType
=
vv
.
CompressType
,
Parameters
=
vv
.
Parameters
};
break
;
}
mHisTags
.
Add
(
vv
.
Id
,
mHisTag
);
histags
.
Add
(
mHisTag
);
if
(
mHisTag
.
Type
==
Cdy
.
Tag
.
RecordType
.
Timer
)
{
if
(!
mLastProcesser
.
AddTag
(
mHisTag
))
{
mLastProcesser
=
new
TimerMemoryCacheProcesser2
()
{
Id
=
mLastProcesser
.
Id
+
1
};
mLastProcesser
.
AddTag
(
mHisTag
);
mRecordTimerProcesser
.
Add
(
mLastProcesser
);
}
}
else
{
if
(!
mLastValueChangedProcesser
.
AddTag
(
mHisTag
))
{
mLastValueChangedProcesser
=
new
ValueChangedMemoryCacheProcesser2
()
{
Name
=
"ValueChanged"
+
mTagCount
};
mValueChangedProcesser
.
Add
(
mLastValueChangedProcesser
);
}
}
mTagCount
++;
}
int
qulityOffset
=
0
;
int
valueOffset
=
0
;
int
blockheadsize
=
0
;
foreach
(
var
vv
in
mHisTags
)
{
var
ss
=
CalMergeBlockSize
(
vv
.
Value
.
TagType
,
vv
.
Value
.
Type
,
blockheadsize
,
out
valueOffset
,
out
qulityOffset
);
var
abuffer
=
new
HisDataMemoryBlock
(
ss
)
{
TimerAddress
=
0
,
ValueAddress
=
valueOffset
,
QualityAddress
=
qulityOffset
,
Id
=
1
};
var
bbuffer
=
new
HisDataMemoryBlock
(
ss
)
{
TimerAddress
=
0
,
ValueAddress
=
valueOffset
,
QualityAddress
=
qulityOffset
,
Id
=
2
};
mMergeMemory1
.
AddTagAddress
(
vv
.
Value
.
Id
,
abuffer
);
mMergeMemory2
.
AddTagAddress
(
vv
.
Value
.
Id
,
bbuffer
);
var
css
=
CalCachDatablockSize
(
vv
.
Value
.
TagType
,
vv
.
Value
.
Type
,
blockheadsize
,
out
valueOffset
,
out
qulityOffset
);
var
cbuffer
=
new
HisDataMemoryBlock
(
css
)
{
TimerAddress
=
0
,
ValueAddress
=
valueOffset
,
QualityAddress
=
qulityOffset
,
Id
=
1
};
var
dbuffer
=
new
HisDataMemoryBlock
(
css
)
{
TimerAddress
=
0
,
ValueAddress
=
valueOffset
,
QualityAddress
=
qulityOffset
,
Id
=
2
};
vv
.
Value
.
HisValueMemory1
=
cbuffer
;
vv
.
Value
.
HisValueMemory2
=
dbuffer
;
mCachMemory1
.
AddTagAddress
(
vv
.
Value
.
Id
,
cbuffer
);
mCachMemory2
.
AddTagAddress
(
vv
.
Value
.
Id
,
dbuffer
);
abuffer
.
Clear
();
bbuffer
.
Clear
();
cbuffer
.
Clear
();
dbuffer
.
Clear
();
vv
.
Value
.
DataSize
=
css
;
}
this
.
mManager
=
mHisDatabase
;
foreach
(
var
vv
in
mRecordTimerProcesser
)
{
if
(!
vv
.
IsStarted
)
vv
.
Start
();
}
foreach
(
var
vv
in
mValueChangedProcesser
)
{
if
(!
vv
.
IsStarted
)
vv
.
Start
();
}
mRecordTimer
.
Start
();
}
/// <summary>
/// 计算每个变量数据块的大小
/// </summary>
...
...
@@ -452,16 +600,6 @@ namespace Cdy.Tag
int
qulityOffset
=
0
;
int
valueOffset
=
0
;
//Dictionary<int, HisDataMemoryBlock> addressoffset = new Dictionary<int, HisDataMemoryBlock>();
//Dictionary<int, HisDataMemoryBlock> addressoffset2 = new Dictionary<int, HisDataMemoryBlock>();
//Dictionary<int, HisDataMemoryBlock> addressoffset3 = new Dictionary<int, HisDataMemoryBlock>();
//Dictionary<int, HisDataMemoryBlock> addressoffset4 = new Dictionary<int, HisDataMemoryBlock>();
mMergeMemory1
=
new
HisDataMemoryBlockCollection
()
{
Name
=
"StoreMemory1"
,
Id
=
1
};
mMergeMemory2
=
new
HisDataMemoryBlockCollection
()
{
Name
=
"StoreMemory2"
,
Id
=
2
};
...
...
@@ -836,7 +974,6 @@ namespace Cdy.Tag
/// <param name="dt"></param>
private
void
RecordAllFirstValue
()
{
foreach
(
var
vv
in
mCurrentMergeMemory
.
TagAddress
)
{
//数据内容: 时间戳(time1+time2+...) +数值区(value1+value2+...)+质量戳区(q1+q2+....)
...
...
RunTime/DBRuntime/His/New/LogManager2.cs
浏览文件 @
82348776
...
...
@@ -264,6 +264,7 @@ namespace Cdy.Tag
Stopwatch
sw
=
new
Stopwatch
();
sw
.
Start
();
string
fileName
=
GetLogFilePath
(
mStartTime
,
mEndTime
);
LoggerService
.
Service
.
Info
(
"LogManager"
,
"开始记日志录文件:"
+
fileName
);
using
(
var
stream
=
System
.
IO
.
File
.
Open
(
fileName
,
FileMode
.
OpenOrCreate
,
FileAccess
.
ReadWrite
,
FileShare
.
ReadWrite
))
{
stream
.
Write
(
BitConverter
.
GetBytes
(
TimeLen
));
...
...
RunTime/DBRuntime/His/New/SeriseEnginer2.cs
浏览文件 @
82348776
...
...
@@ -649,7 +649,7 @@ namespace Cdy.Tag
if
(
mBlockPointMemory
!=
null
)
mBlockPointMemory
.
Dispose
();
mBlockPointMemory
=
new
MemoryBlock
(
tags
.
Count
()
*
8
,
1024
*
1024
);
mBlockPointMemory
=
new
MemoryBlock
(
tags
.
Count
()
*
8
,
4
*
1024
*
1024
);
mBlockPointMemory
.
Clear
();
LoggerService
.
Service
.
Info
(
"SeriseEnginer"
,
"Cal BlockPointMemory memory size:"
+
(
mBlockPointMemory
.
AllocSize
)
/
1024.0
/
1024
+
"M"
,
ConsoleColor
.
Cyan
);
...
...
RunTime/DBRuntime/His/New/TimerMemoryCacheProcesser2.cs
浏览文件 @
82348776
...
...
@@ -52,6 +52,8 @@ namespace Cdy.Tag
private
int
mBusyCount
=
0
;
private
bool
mIsStarted
=
false
;
#
endregion
...
Variables
...
#
region
...
Events
...
...
...
@@ -87,6 +89,8 @@ namespace Cdy.Tag
/// </summary>
public
int
Id
{
get
;
set
;
}
public
bool
IsStarted
{
get
{
return
mIsStarted
;
}
}
#
endregion
...
Properties
...
#
region
...
Methods
...
...
...
@@ -120,6 +124,7 @@ namespace Cdy.Tag
mRecordThread
=
new
Thread
(
ThreadProcess
);
mRecordThread
.
IsBackground
=
true
;
mRecordThread
.
Start
();
mIsStarted
=
true
;
}
/// <summary>
...
...
@@ -130,6 +135,7 @@ namespace Cdy.Tag
mIsClosed
=
true
;
resetEvent
.
Set
();
closedEvent
.
WaitOne
();
mIsStarted
=
false
;
}
/// <summary>
...
...
RunTime/DBRuntime/His/New/ValueChangedMemoryCacheProcesser2.cs
浏览文件 @
82348776
...
...
@@ -48,6 +48,8 @@ namespace Cdy.Tag
private
Thread
mRecordThread
;
private
bool
mIsStarted
=
false
;
#
endregion
...
Variables
...
#
region
...
Events
...
...
...
@@ -90,6 +92,11 @@ namespace Cdy.Tag
private
int
mLastUpdateSecond
=
-
1
;
/// <summary>
///
/// </summary>
public
bool
IsStarted
{
get
{
return
mIsStarted
;
}
}
#
endregion
...
Properties
...
#
region
...
Methods
...
...
...
@@ -130,6 +137,8 @@ namespace Cdy.Tag
mRecordThread
=
new
Thread
(
ThreadProcess
);
mRecordThread
.
IsBackground
=
true
;
mRecordThread
.
Start
();
mIsStarted
=
true
;
}
/// <summary>
...
...
@@ -141,7 +150,7 @@ namespace Cdy.Tag
resetEvent
.
Set
();
closedEvent
.
WaitOne
();
Clear
();
mIsStarted
=
false
;
ServiceLocator
.
Locator
.
Resolve
<
IRealDataNotify
>().
UnSubscribeValueChangedForConsumer
(
this
.
Name
);
}
...
...
RunTime/DBRuntime/His/Serise/SeriseEnginer.cs
浏览文件 @
82348776
...
...
@@ -649,7 +649,7 @@ namespace Cdy.Tag
if
(
mBlockPointMemory
!=
null
)
mBlockPointMemory
.
Dispose
();
mBlockPointMemory
=
new
MemoryBlock
(
tags
.
Count
()
*
8
,
1024
*
1024
)
;
mBlockPointMemory
=
new
MemoryBlock
(
tags
.
Count
()
*
8
,
1024
*
1024
)
{
Name
=
"block"
+
this
.
Id
}
;
mBlockPointMemory
.
Clear
();
LoggerService
.
Service
.
Info
(
"SeriseEnginer"
,
"Cal BlockPointMemory memory size:"
+
(
mBlockPointMemory
.
AllocSize
)
/
1024.0
/
1024
+
"M"
,
ConsoleColor
.
Cyan
);
...
...
RunTime/DBRuntime/Runner.cs
浏览文件 @
82348776
...
...
@@ -9,6 +9,8 @@
using
Cdy.Tag.Driver
;
using
System
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
...
...
@@ -132,12 +134,73 @@ namespace Cdy.Tag
/// </summary>
private
void
LoadDatabase
()
{
Stopwatch
sw
=
new
Stopwatch
();
sw
.
Start
();
this
.
mDatabase
=
new
DatabaseSerise
().
Load
(
mDatabaseName
);
this
.
mRealDatabase
=
this
.
mDatabase
.
RealDatabase
;
this
.
mHisDatabase
=
this
.
mDatabase
.
HisDatabase
;
CurrentDatabaseVersion
=
this
.
mRealDatabase
.
Version
;
CurrentDatabase
=
mRealDatabase
.
Name
;
CurrentDatabaseLastUpdateTime
=
mRealDatabase
.
UpdateTime
;
sw
.
Stop
();
LoggerService
.
Service
.
Info
(
"LoadDatabase"
,
"load "
+
mDatabaseName
+
" take "
+
sw
.
ElapsedMilliseconds
.
ToString
()
+
" ms"
);
}
/// <summary>
/// 重新加载数据库
/// </summary>
public
void
ReStartDatabase
()
{
LoggerService
.
Service
.
Info
(
"ReStartDatabase"
,
"start to restart database."
,
ConsoleColor
.
DarkYellow
);
Stopwatch
sw
=
new
Stopwatch
();
sw
.
Start
();
var
db
=
new
DatabaseSerise
().
Load
(
mDatabaseName
);
List
<
Tagbase
>
ltmp
=
new
List
<
Tagbase
>();
List
<
HisTag
>
htmp
=
new
List
<
HisTag
>();
foreach
(
var
vv
in
db
.
RealDatabase
.
Tags
.
Where
(
e
=>
this
.
mRealDatabase
.
Tags
.
ContainsKey
(
e
.
Key
)))
{
ltmp
.
Add
(
vv
.
Value
);
}
foreach
(
var
vv
in
ltmp
)
{
if
(
db
.
HisDatabase
.
HisTags
.
ContainsKey
(
vv
.
Id
))
{
htmp
.
Add
(
db
.
HisDatabase
.
HisTags
[
vv
.
Id
]);
}
}
LoggerService
.
Service
.
Info
(
"ReStartDatabase"
,
"reload "
+
mDatabaseName
+
" take "
+
sw
.
ElapsedMilliseconds
.
ToString
()
+
" ms"
);
compressEnginer
.
WaitForReady
();
sw
.
Reset
();
sw
.
Start
();
hisEnginer
.
Pause
();
realEnginer
.
Lock
();
realEnginer
.
ReLoadTags
(
ltmp
,
db
.
RealDatabase
);
realEnginer
.
UnLock
();
hisEnginer
.
ReLoadTags
(
htmp
,
db
.
HisDatabase
);
compressEnginer
.
ReSizeTagCompress
(
htmp
);
hisEnginer
.
Resume
();
this
.
mDatabase
=
db
;
this
.
mRealDatabase
=
db
.
RealDatabase
;
this
.
mHisDatabase
=
db
.
HisDatabase
;
CurrentDatabaseVersion
=
db
.
Version
;
CurrentDatabase
=
db
.
Name
;
CurrentDatabaseLastUpdateTime
=
mRealDatabase
.
UpdateTime
;
sw
.
Stop
();
LoggerService
.
Service
.
Info
(
"ReStartDatabase"
,
"ReInit"
+
mDatabaseName
+
" take "
+
sw
.
ElapsedMilliseconds
.
ToString
()
+
" ms"
);
LoggerService
.
Service
.
Info
(
"ReStartDatabase"
,
"start to restart database finish."
,
ConsoleColor
.
DarkYellow
);
}
/// <summary>
...
...
RunTime/DBRuntimeTests/DBRuntimeTests.csproj
0 → 100644
浏览文件 @
82348776
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
<PackageReference Include="coverlet.collector" Version="1.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DBRuntime\DBRuntime.csproj" />
</ItemGroup>
</Project>
RunTime/DBRuntimeTests/His/New/HisDataMemoryBlockCollectionTests.cs
0 → 100644
浏览文件 @
82348776
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
DBRuntime.His
;
//==============================================================
// Copyright (C) 2020 Chongdaoyang Inc. All rights reserved.
//
//==============================================================
// Create by 种道洋 at 2020/8/8 15:22:48 .
// Version 1.0
// CDYWORK
//==============================================================
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
System.Diagnostics
;
using
Microsoft.VisualStudio.TestPlatform.ObjectModel
;
namespace
DBRuntime.His.Tests
{
[
TestClass
()]
public
class
HisDataMemoryBlockCollectionTests
{
[
TestMethod
()]
public
void
ClearTest
()
{
HisDataMemoryBlockCollection
hdb
=
new
HisDataMemoryBlockCollection
();
for
(
int
i
=
0
;
i
<
1000000
;
i
++)
{
hdb
.
AddTagAddress
(
i
,
new
HisDataMemoryBlock
(
3300
));
}
hdb
.
Clear
();
Stopwatch
sw
=
new
Stopwatch
();
sw
.
Start
();
foreach
(
var
vv
in
hdb
.
TagAddress
.
Values
)
{
vv
.
WriteShort
(
0
,
10
);
vv
.
WriteInt
(
10
,
20
);
vv
.
WriteDouble
(
20
,
3.444
);
Assert
.
IsTrue
(
vv
.
ReadShort
(
0
)
==
10
);
Assert
.
IsTrue
(
vv
.
ReadInt
(
10
)
==
20
);
Assert
.
IsTrue
(
vv
.
ReadDouble
(
20
)
==
3.444
);
}
sw
.
Stop
();
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录