Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cdy816
Mars
提交
45d7b693
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 搜索 >>
提交
45d7b693
编写于
2月 12, 2020
作者:
cdy816
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
日常更新
上级
b2b0ff90
变更
40
隐藏空白更改
内联
并排
Showing
40 changed file
with
410 addition
and
147 deletion
+410
-147
Cdy.Tag.Common/Common/MemoryBlock.cs
Cdy.Tag.Common/Common/MemoryBlock.cs
+88
-8
Cdy.Tag.Common/Logger/ConsoleLogger.cs
Cdy.Tag.Common/Logger/ConsoleLogger.cs
+1
-1
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.dll
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.dll
+0
-0
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.pdb
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.pdb
+0
-0
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.cache
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.cache
+1
-1
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.dgspec.json
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.dgspec.json
+1
-1
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.dll
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.dll
+0
-0
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.pdb
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.pdb
+0
-0
Cdy.Tag.Common/obj/project.assets.json
Cdy.Tag.Common/obj/project.assets.json
+1
-1
Cdy.Tag/His/HisSettingDoc.cs
Cdy.Tag/His/HisSettingDoc.cs
+1
-1
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.dll
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.dll
+0
-0
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.pdb
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.pdb
+0
-0
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.cache
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.cache
+1
-1
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.dgspec.json
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.dgspec.json
+1
-1
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.dll
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.dll
+0
-0
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.pdb
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.pdb
+0
-0
Cdy.Tag/obj/project.assets.json
Cdy.Tag/obj/project.assets.json
+1
-1
DataRunner/His/Compress/CompressEnginer.cs
DataRunner/His/Compress/CompressEnginer.cs
+18
-5
DataRunner/His/HisEnginer.cs
DataRunner/His/HisEnginer.cs
+83
-26
DataRunner/His/HisQuery/QuerySerivce.cs
DataRunner/His/HisQuery/QuerySerivce.cs
+34
-22
DataRunner/His/HisQuery/TagHeadOffsetManager.cs
DataRunner/His/HisQuery/TagHeadOffsetManager.cs
+3
-3
DataRunner/His/Serise/DataFileSeriserbase.cs
DataRunner/His/Serise/DataFileSeriserbase.cs
+10
-0
DataRunner/His/Serise/LocalFileSeriser.cs
DataRunner/His/Serise/LocalFileSeriser.cs
+33
-13
DataRunner/His/Serise/SeriseEnginer.cs
DataRunner/His/Serise/SeriseEnginer.cs
+72
-25
DataRunner/His/Tag/HisRunTag.cs
DataRunner/His/Tag/HisRunTag.cs
+30
-12
DataRunner/Runner.cs
DataRunner/Runner.cs
+13
-3
DataRunner/obj/DataRunner.csproj.nuget.cache
DataRunner/obj/DataRunner.csproj.nuget.cache
+1
-1
DataRunner/obj/DataRunner.csproj.nuget.dgspec.json
DataRunner/obj/DataRunner.csproj.nuget.dgspec.json
+3
-3
DataRunner/obj/project.assets.json
DataRunner/obj/project.assets.json
+1
-1
DbManager.Desktop/obj/DbManager.Desktop.csproj.nuget.cache
DbManager.Desktop/obj/DbManager.Desktop.csproj.nuget.cache
+1
-1
DbManager.Desktop/obj/DbManager.Desktop.csproj.nuget.dgspec.json
...er.Desktop/obj/DbManager.Desktop.csproj.nuget.dgspec.json
+1
-1
DbManager.Desktop/obj/project.assets.json
DbManager.Desktop/obj/project.assets.json
+1
-1
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
+0
-0
Mars/.vs/Mars/v16/.suo
Mars/.vs/Mars/v16/.suo
+0
-0
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
+0
-0
Mars/Mars.sln
Mars/Mars.sln
+1
-7
Mars/Program.cs
Mars/Program.cs
+2
-0
Mars/obj/Mars.csproj.nuget.cache
Mars/obj/Mars.csproj.nuget.cache
+1
-1
Mars/obj/Mars.csproj.nuget.dgspec.json
Mars/obj/Mars.csproj.nuget.dgspec.json
+5
-5
Mars/obj/project.assets.json
Mars/obj/project.assets.json
+1
-1
未找到文件。
Cdy.Tag.Common/Common/MemoryBlock.cs
浏览文件 @
45d7b693
...
...
@@ -17,11 +17,11 @@ namespace Cdy.Tag
/// <summary>
/// 划分内存
/// </summary>
public
unsafe
class
MemoryBlock
:
IDisposable
public
unsafe
class
MemoryBlock
:
IDisposable
{
#
region
...
Variables
...
///// <summary>
/////
///// </summary>
...
...
@@ -29,8 +29,11 @@ namespace Cdy.Tag
private
List
<
byte
[
]>
mBuffers
;
/// <summary>
///
/// </summary>
private
List
<
IntPtr
>
mHandles
;
/// <summary>
///
/// </summary>
...
...
@@ -67,7 +70,7 @@ namespace Cdy.Tag
/// </summary>
/// <param name="size"></param>
/// <param name="blockSize"></param>
public
MemoryBlock
(
long
size
,
int
blockSize
)
public
MemoryBlock
(
long
size
,
int
blockSize
)
{
BufferItemSize
=
blockSize
;
Init
(
size
);
...
...
@@ -86,6 +89,11 @@ namespace Cdy.Tag
#
region
...
Properties
...
/// <summary>
///
/// </summary>
public
string
Name
{
get
;
set
;
}
/// <summary>
///
/// </summary>
...
...
@@ -95,6 +103,10 @@ namespace Cdy.Tag
{
return
mBuffers
;
}
internal
set
{
mBuffers
=
value
;
}
}
...
...
@@ -130,7 +142,7 @@ namespace Cdy.Tag
{
get
{
return
mBuffers
.
Count
*
BufferItemSize
;
return
mBuffers
.
Count
*
BufferItemSize
;
}
}
...
...
@@ -163,6 +175,34 @@ namespace Cdy.Tag
}
}
/// <summary>
///
/// </summary>
public
long
AllocSize
{
get
{
return
mAllocSize
;
}
}
/// <summary>
///
/// </summary>
internal
List
<
IntPtr
>
Handles
{
get
{
return
mHandles
;
}
set
{
mHandles
=
value
;
}
}
#
endregion
...
Properties
...
...
...
@@ -294,6 +334,8 @@ namespace Cdy.Tag
Array
.
Clear
(
vv
,
0
,
vv
.
Length
);
mUsedSize
=
0
;
mPosition
=
0
;
LoggerService
.
Service
.
Info
(
"MemoryBlock"
,
Name
+
" is clear !"
);
}
#
region
ReadAndWrite
...
...
@@ -1439,8 +1481,9 @@ namespace Cdy.Tag
/// <param name="memory"></param>
public
static
void
MakeMemoryBusy
(
this
MemoryBlock
memory
)
{
LoggerService
.
Service
.
Info
(
"MemoryBlock"
,
memory
.
Name
+
" is busy....."
);
memory
.
IsBusy
=
true
;
memory
.
StartMemory
[
0
]
=
1
;
//
memory.StartMemory[0] = 1;
}
/// <summary>
...
...
@@ -1449,9 +1492,46 @@ namespace Cdy.Tag
/// <param name="memory"></param>
public
static
void
MakeMemoryNoBusy
(
this
MemoryBlock
memory
)
{
LoggerService
.
Service
.
Info
(
"MemoryBlock"
,
memory
.
Name
+
" is ready !"
);
memory
.
IsBusy
=
false
;
memory
.
StartMemory
[
0
]
=
0
;
//
memory.StartMemory[0] = 0;
}
}
public
static
void
SaveToFile
(
this
MemoryBlock
memory
,
string
fileName
)
{
var
stream
=
System
.
IO
.
File
.
Open
(
fileName
,
FileMode
.
OpenOrCreate
,
FileAccess
.
ReadWrite
,
FileShare
.
ReadWrite
);
stream
.
Write
(
BitConverter
.
GetBytes
(
memory
.
Buffers
.
Count
),
0
,
4
);
stream
.
Write
(
BitConverter
.
GetBytes
(
memory
.
BufferItemSize
),
0
,
4
);
foreach
(
var
vv
in
memory
.
Buffers
)
{
stream
.
Write
(
vv
,
0
,
vv
.
Length
);
}
stream
.
Flush
();
stream
.
Close
();
}
/// <summary>
///
/// </summary>
/// <param name="memory"></param>
/// <param name="fileName"></param>
public
static
MemoryBlock
LoadFileToMemory
(
this
string
fileName
)
{
var
stream
=
(
System
.
IO
.
File
.
Open
(
fileName
,
FileMode
.
Open
,
FileAccess
.
Read
));
byte
[]
bb
=
new
byte
[
4
];
stream
.
Read
(
bb
,
0
,
4
);
int
mbcount
=
BitConverter
.
ToInt32
(
bb
,
0
);
stream
.
Read
(
bb
,
0
,
4
);
int
bufferItemSize
=
BitConverter
.
ToInt32
(
bb
,
0
);
MemoryBlock
memory
=
new
MemoryBlock
(
bufferItemSize
*
mbcount
);
for
(
int
i
=
0
;
i
<
mbcount
;
i
++)
{
long
size
=
Math
.
Min
(
memory
.
BufferItemSize
,
stream
.
Length
-
stream
.
Position
);
stream
.
Read
(
memory
.
Buffers
[
i
],
0
,
(
int
)
size
);
}
stream
.
Close
();
return
memory
;
}
}
}
Cdy.Tag.Common/Logger/ConsoleLogger.cs
浏览文件 @
45d7b693
...
...
@@ -67,7 +67,7 @@ namespace Cdy.Tag
/// <param name="msg"></param>
public
void
Info
(
string
name
,
string
msg
)
{
Console
.
WriteLine
(
string
.
Format
(
infoFormate
,
DateTime
.
Now
.
ToString
(),
name
,
msg
));
Console
.
WriteLine
(
string
.
Format
(
infoFormate
,
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd HH:mm:ss.fff"
),
name
,
msg
));
}
#
endregion
...
Methods
...
...
...
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.dll
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag.Common/bin/Debug/netstandard2.0/Cdy.Tag.Common.pdb
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.cache
浏览文件 @
45d7b693
{
"version": 1,
"dgSpecHash": "
GNdw02PdT0/bn3nQZfLtxrHJTThhfM4VUJffsUU91Qtw7EJFKcoYDujiddGQArl4hK1qow6TDEWLLnHQazvVDQ
==",
"dgSpecHash": "
ptZw5fqc+E+hw+c5okY4wygl5ajInAshIC3syZ7Uh2b5CO8dT1HoXEklk8I343wX8OlBcKMNjnFn703AzrZ/Ng
==",
"success": true
}
\ No newline at end of file
Cdy.Tag.Common/obj/Cdy.Tag.Common.csproj.nuget.dgspec.json
浏览文件 @
45d7b693
...
...
@@ -57,7 +57,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.dll
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag.Common/obj/Debug/netstandard2.0/Cdy.Tag.Common.pdb
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag.Common/obj/project.assets.json
浏览文件 @
45d7b693
...
...
@@ -235,7 +235,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
Cdy.Tag/His/HisSettingDoc.cs
浏览文件 @
45d7b693
...
...
@@ -44,7 +44,7 @@ namespace Cdy.Tag
/// 单个数据块保存数据的时长
/// 单位分钟
/// </summary>
public
int
DataBlockDuration
{
get
;
set
;
}
=
1
0
;
public
int
DataBlockDuration
{
get
;
set
;
}
=
1
;
/// <summary>
/// 一个文件中变量的个数
...
...
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.dll
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag/bin/Debug/netstandard2.0/Cdy.Tag.pdb
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.cache
浏览文件 @
45d7b693
{
"version": 1,
"dgSpecHash": "
EOJIczWwB0MKenCv2sHeyMwKV++hyG+cdOS4BaX0riyXWgspAvE43Rn3U0uqVhmcPgZETzVCJwn+V/3S1rSbsA
==",
"dgSpecHash": "
zmXE4ilC7tFv7X9Fxgrlqdv1P1IuaybFlzO9p4PSGf/J5/CO4zjaCUk7xZYDr4A3XQ3gJZWvDKzQBETTm7CqPw
==",
"success": true
}
\ No newline at end of file
Cdy.Tag/obj/Cdy.Tag.csproj.nuget.dgspec.json
浏览文件 @
45d7b693
...
...
@@ -57,7 +57,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.dll
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag/obj/Debug/netstandard2.0/Cdy.Tag.pdb
浏览文件 @
45d7b693
无法预览此类型文件
Cdy.Tag/obj/project.assets.json
浏览文件 @
45d7b693
...
...
@@ -235,7 +235,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
DataRunner/His/Compress/CompressEnginer.cs
浏览文件 @
45d7b693
...
...
@@ -87,8 +87,8 @@ namespace Cdy.Tag
数据区:[data block]
data block:size+compressType+data
*/
mMemory1
=
new
MemoryBlock
(
size
);
mMemory2
=
new
MemoryBlock
(
size
);
mMemory1
=
new
MemoryBlock
(
size
)
{
Name
=
"CompressMemory1"
}
;
mMemory2
=
new
MemoryBlock
(
size
)
{
Name
=
"CompressMemory2"
}
;
}
/// <summary>
...
...
@@ -161,18 +161,31 @@ namespace Cdy.Tag
resetEvent
.
Reset
();
if
(
mIsClosed
)
break
;
LoggerService
.
Service
.
Info
(
"Compress"
,
"********开始执行压缩********"
);
var
sm
=
mSourceMemory
;
mTargetMemory
=
SelectMemory
();
while
(
mTargetMemory
==
null
)
{
LoggerService
.
Service
.
Info
(
"Comp
er
ss"
,
"压缩出现阻塞"
);
LoggerService
.
Service
.
Info
(
"Comp
re
ss"
,
"压缩出现阻塞"
);
Thread
.
Sleep
(
10
);
mTargetMemory
=
SelectMemory
();
}
mTargetMemory
.
MakeMemoryBusy
();
Compress
();
mSourceMemory
.
MakeMemoryNoBusy
();
ServiceLocator
.
Locator
.
Resolve
<
IDataSerialize
>().
RequestToSave
(
mTargetMemory
,
mCurrentTime
);
sm
.
Clear
();
sm
.
MakeMemoryNoBusy
();
LoggerService
.
Service
.
Info
(
"Compress"
,
">>>>>>>>>压缩完成>>>>>>>>>"
+
mTargetMemory
.
UsedSize
);
//System.Threading.Tasks.Task.Run(new Action(() => {
// ServiceLocator.Locator.Resolve<IDataSerialize>().RequestToSave(mTargetMemory, mCurrentTime);
//}));
//new System.Threading.Tasks.TaskFactory().StartNew(new Action(() => {
ServiceLocator
.
Locator
.
Resolve
<
IDataSerialize
>().
RequestToSave
(
mTargetMemory
,
mCurrentTime
);
//}));
}
closedEvent
.
Set
();
}
...
...
DataRunner/His/HisEnginer.cs
浏览文件 @
45d7b693
...
...
@@ -35,7 +35,7 @@ namespace Cdy.Tag
/// 每个变量在内存中保留的历史记录历史的长度
/// 单位s
/// </summary>
public
int
MemoryCachTime
=
6
0
*
60
;
public
int
MemoryCachTime
=
1
0
*
60
;
/// <summary>
/// 历史记录时间最短间隔
...
...
@@ -208,6 +208,7 @@ namespace Cdy.Tag
if
(!
mLastProcesser
.
AddTag
(
mHisTag
))
{
mLastProcesser
=
new
TimerMemoryCacheProcesser
();
mLastProcesser
.
AddTag
(
mHisTag
);
mRecordTimerProcesser
.
Add
(
mLastProcesser
);
}
}
...
...
@@ -328,9 +329,10 @@ namespace Cdy.Tag
vv
.
Value
.
DataSize
=
ss
;
headSize
+=
ss
;
vv
.
Value
.
Init
();
}
mMemory1
=
new
MemoryBlock
(
headSize
);
mMemory2
=
new
MemoryBlock
(
headSize
);
mMemory1
=
new
MemoryBlock
(
headSize
)
{
Name
=
"RecordMemory1"
}
;
mMemory2
=
new
MemoryBlock
(
headSize
)
{
Name
=
"RecordMemory2"
}
;
CurrentMemory
=
mMemory1
;
...
...
@@ -341,7 +343,9 @@ namespace Cdy.Tag
/// </summary>
private
void
InitMemory
()
{
mCurrentMemory
.
Clear
();
LoggerService
.
Service
.
Info
(
"Record"
,
"内存初始化开始 "
);
//mCurrentMemory.Clear();
//LoggerService.Service.Info("Record", "内存初始化开始 清空完成");
//写入时间
mCurrentMemory
.
WriteDatetime
(
1
,
mLastProcessTime
);
//写入变量个数
...
...
@@ -351,6 +355,7 @@ namespace Cdy.Tag
//写入最小时间间隔
mCurrentMemory
.
WriteInt
(
17
,
MemoryTimeTick
);
int
offset
=
21
;
//LoggerService.Service.Info("Record", "内存初始化开始 头数据写入完成");
foreach
(
var
vv
in
mHisTags
)
{
mCurrentMemory
.
WriteInt
(
offset
,
vv
.
Value
.
Id
);
//Tag id int(4)
...
...
@@ -359,8 +364,6 @@ namespace Cdy.Tag
offset
+=
12
;
}
HisRunTag
.
StartTime
=
mLastProcessTime
;
mMemory1
.
MakeMemoryBusy
();
mMemory2
.
MakeMemoryNoBusy
();
}
/// <summary>
...
...
@@ -376,7 +379,13 @@ namespace Cdy.Tag
mRecordTimer
.
Elapsed
+=
MRecordTimer_Elapsed
;
mRecordTimer
.
Start
();
mLastProcessTime
=
DateTime
.
Now
;
LoggerService
.
Service
.
Info
(
"Record"
,
"历史变量个数: "
+
this
.
mHisTags
.
Count
);
InitMemory
();
mMemory1
.
MakeMemoryNoBusy
();
mMemory2
.
MakeMemoryNoBusy
();
}
/// <summary>
...
...
@@ -387,7 +396,7 @@ namespace Cdy.Tag
{
while
(
memory
.
IsBusy
)
{
LoggerService
.
Service
.
Info
(
"Record"
,
"记录出现阻塞"
);
LoggerService
.
Service
.
Info
(
"Record"
,
"记录出现阻塞 "
+
memory
.
Name
);
System
.
Threading
.
Thread
.
Sleep
(
1
);
}
}
...
...
@@ -398,26 +407,48 @@ namespace Cdy.Tag
private
void
SwitchMemory
()
{
var
mcc
=
mCurrentMemory
;
LoggerService
.
Service
.
Info
(
"Record"
,
@""
);
LoggerService
.
Service
.
Info
(
"Record"
,
".....开始Memory选择....."
);
if
(
mCurrentMemory
==
mMemory1
)
{
CheckMemoryIsReady
(
mMemory2
);
CurrentMemory
=
mMemory2
;
LoggerService
.
Service
.
Info
(
"Record"
,
"选择 Memory2 "
);
}
else
{
CheckMemoryIsReady
(
mMemory1
);
CurrentMemory
=
mMemory1
;
LoggerService
.
Service
.
Info
(
"Record"
,
"选择 Memory1 "
);
}
//提交到数据压缩流程
ServiceLocator
.
Locator
.
Resolve
<
IDataCompress
>().
RequestToCompress
(
mcc
);
if
(
mcc
!=
null
)
{
mcc
.
MakeMemoryBusy
();
//提交到数据压缩流程
ServiceLocator
.
Locator
.
Resolve
<
IDataCompress
>().
RequestToCompress
(
mcc
);
InitMemory
();
//new System.Threading.Tasks.TaskFactory().StartNew(new Action(() => {
foreach
(
var
vv
in
mHisTags
.
Values
)
//}));
//System.Threading.Tasks.Task.Run(new Action(() => {
// ServiceLocator.Locator.Resolve<IDataCompress>().RequestToCompress(mcc);
//}));
LoggerService
.
Service
.
Info
(
"Record"
,
"提交内存 "
+
mcc
.
Name
+
" 进行压缩"
);
}
InitMemory
();
LoggerService
.
Service
.
Info
(
"Record"
,
"内存初始化完成"
);
foreach
(
var
vv
in
mHisTags
.
Values
)
{
vv
.
Reset
();
}
LoggerService
.
Service
.
Info
(
"Record"
,
".....结束Memory选择....."
);
LoggerService
.
Service
.
Info
(
"Record"
,
""
);
}
/// <summary>
...
...
@@ -443,41 +474,67 @@ namespace Cdy.Tag
var
mm
=
(
dt
.
Hour
*
24
+
dt
.
Minute
*
60
+
dt
.
Second
)
/
MemoryCachTime
;
if
(
mm
!=
mLastProcessTick
)
{
if
(
mLastProcessTick
!=
-
1
)
LoggerService
.
Service
.
Info
(
"Record"
,
"------------------------------------------------------------"
);
//LoggerService.Service.Info("Record", "开始新的DataRegion");
if
(
mLastProcessTick
!=
-
1
)
{
LoggerService
.
Service
.
Info
(
"Record"
,
"开始记录尾部数据"
);
//在内存尾部一次填充所有值
if
(
mCurrentMemory
!=
null
)
{
foreach
(
var
vv
in
mRecordTimerProcesser
)
{
//foreach (var vv in mRecordTimerProcesser)
//{
// vv.RecordAllValue(dt);
//}
System
.
Threading
.
Tasks
.
Parallel
.
ForEach
(
mRecordTimerProcesser
,
(
vv
)
=>
{
vv
.
RecordAllValue
(
dt
);
}
}
);
foreach
(
var
vv
in
mValueChangedProcesser
)
{
System
.
Threading
.
Tasks
.
Parallel
.
ForEach
(
mValueChangedProcesser
,
(
vv
)
=>
{
vv
.
RecordAllValue
(
dt
);
}
}
});
//foreach (var vv in mValueChangedProcesser)
//{
// vv.RecordAllValue(dt);
//}
}
LoggerService
.
Service
.
Info
(
"Record"
,
"结束记录尾部数据"
);
mLastProcessTime
=
dt
;
//将之前的Memory提交到历史存储流程中
SwitchMemory
();
}
mLastProcessTick
=
mm
;
LoggerService
.
Service
.
Info
(
"Record"
,
mCurrentMemory
.
Name
+
" 开始工作 "
);
//在内存头部一次填充所有值
foreach
(
var
vv
in
mRecordTimerProcesser
)
{
System
.
Threading
.
Tasks
.
Parallel
.
ForEach
(
mRecordTimerProcesser
,
(
vv
)
=>
{
vv
.
WriteHeader
();
vv
.
RecordAllValue
(
dt
);
}
}
);
foreach
(
var
vv
in
mValueChangedProcesser
)
{
//foreach (var vv in mRecordTimerProcesser)
//{
// vv.WriteHeader();
// vv.RecordAllValue(dt);
//}
//foreach (var vv in mValueChangedProcesser)
//{
// vv.WriteHeader();
// vv.RecordAllValue(dt);
//}
System
.
Threading
.
Tasks
.
Parallel
.
ForEach
(
mValueChangedProcesser
,
(
vv
)
=>
{
vv
.
WriteHeader
();
vv
.
RecordAllValue
(
dt
);
}
});
//LoggerService.Service.Info("Record", " 完成DataRegion切换 ");
LoggerService
.
Service
.
Info
(
"Record"
,
"------------------------------------------------------------"
);
}
else
{
...
...
DataRunner/His/HisQuery/QuerySerivce.cs
浏览文件 @
45d7b693
...
...
@@ -3114,14 +3114,16 @@ namespace Cdy.Tag
/// <param name="blockDuration"></param>
/// <param name="timetick"></param>
/// <returns></returns>
public
static
Dictionary
<
int
,
long
>
CheckBlockHeadCach
(
this
DataFileSeriserbase
datafile
,
long
offse
t
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
public
static
Dictionary
<
int
,
int
>
CheckBlockHeadCach
(
this
DataFileSeriserbase
datafile
,
long
offset
,
out
int
tagCoun
t
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
{
//文件头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+tagcount(4)+ tagid sum(8) +file duration(4)+ block duration(4)+Time tick duration(4)+ { + tagid1+tagid2+...+tagidn }+ {
tag1 block point1(8) + block size(4) + tag1 block point2(8)+ block size(4) + tag1 block point3(8)+ block size(4)+...+tag1 block pointn(8)+ block size(4) + tag2 block point1 (8)+ block size(4)+ tag2 block point2(8)+ block size(4)+
....}
//文件头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+tagcount(4)+ tagid sum(8) +file duration(4)+ block duration(4)+Time tick duration(4)+ { + tagid1+tagid2+...+tagidn }+ {
[tag1 block point1(8) + tag2 block point1+ tag3 block point1+...] + [tag1 block point2(8) + tag2 block point2+ tag3 block point2+...]
....}
var
dataoffset
=
offset
+
24
;
//读取变量个数
int
count
=
datafile
.
ReadInit
(
dataoffset
);
dataoffset
+=
4
;
tagCount
=
count
;
//读取校验和
long
idsum
=
datafile
.
ReadLong
(
dataoffset
);
dataoffset
+=
8
;
...
...
@@ -3147,7 +3149,8 @@ namespace Cdy.Tag
{
VarintCodeMemory
vcm
=
new
VarintCodeMemory
(
dd
.
StartMemory
);
var
ltmp
=
vcm
.
ToIntList
();
var
dtmp
=
new
Dictionary
<
int
,
long
>();
var
dtmp
=
new
Dictionary
<
int
,
int
>();
if
(
ltmp
.
Count
>
0
)
{
int
preid
=
ltmp
[
0
];
...
...
@@ -3160,6 +3163,7 @@ namespace Cdy.Tag
}
}
TagHeadOffsetManager
.
manager
.
Add
(
idsum
,
count
,
dtmp
);
return
dtmp
;
}
}
...
...
@@ -3171,7 +3175,7 @@ namespace Cdy.Tag
}
/// <summary>
/// 读取
数据区域的数据头数据
/// 读取
某个变量在头部文件种的序号
/// </summary>
/// <param name="datafile"></param>
/// <param name="tid"></param>
...
...
@@ -3180,9 +3184,9 @@ namespace Cdy.Tag
/// <param name="blockDuration"></param>
/// <param name="timetick"></param>
/// <returns></returns>
public
static
long
ReadTargetBlockAddress
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
public
static
int
ReadTagIndexInDataPointer
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
out
int
tagCount
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
{
var
hfile
=
datafile
.
CheckBlockHeadCach
(
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
var
hfile
=
datafile
.
CheckBlockHeadCach
(
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
if
(
hfile
.
ContainsKey
(
tid
))
{
return
hfile
[
tid
];
...
...
@@ -3200,9 +3204,9 @@ namespace Cdy.Tag
/// <param name="blockDuration"></param>
/// <param name="timetick"></param>
/// <returns></returns>
public
static
List
<
long
>
ReadTargetBlockAddress
(
this
DataFileSeriserbase
datafile
,
List
<
int
>
tid
,
long
offse
t
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
public
static
List
<
long
>
ReadTargetBlockAddress
(
this
DataFileSeriserbase
datafile
,
List
<
int
>
tid
,
long
offset
,
out
int
tagCoun
t
,
out
int
fileDuration
,
out
int
blockDuration
,
out
int
timetick
)
{
var
hfile
=
datafile
.
CheckBlockHeadCach
(
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
var
hfile
=
datafile
.
CheckBlockHeadCach
(
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
List
<
long
>
re
=
new
List
<
long
>();
foreach
(
var
vv
in
tid
)
{
...
...
@@ -3233,7 +3237,8 @@ namespace Cdy.Tag
public
static
MemoryBlock
ReadTagDataBlock
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
DateTime
dataTime
,
out
int
timetick
)
{
int
fileDuration
,
blockDuration
=
0
;
var
blockpointer
=
datafile
.
ReadTargetBlockAddress
(
tid
,
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
tagCount
=
0
;
var
blockIndex
=
datafile
.
ReadTagIndexInDataPointer
(
tid
,
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
blockcount
=
fileDuration
*
60
/
blockDuration
;
var
startTime
=
datafile
.
ReadDateTime
(
16
);
...
...
@@ -3249,10 +3254,11 @@ namespace Cdy.Tag
throw
new
Exception
(
"DataPointer index is out of total block number"
);
}
var
dataPointer
=
datafile
.
ReadLong
(
blockpointer
+
dindex
*
12
);
var
datasize
=
datafile
.
ReadInit
(
blockpointer
+
dindex
*
12
+
8
);
var
dataPointer
=
datafile
.
ReadLong
(
blockIndex
*
8
+
dindex
*
tagCount
*
8
);
//读取DataBlock的地址
var
datasize
=
datafile
.
ReadInit
(
dataPointer
);
//读取DataBlock 的大小
return
datafile
.
Read
(
dataPointer
,
datasize
);
return
datafile
.
Read
(
dataPointer
+
4
,
datasize
);
}
/// <summary>
...
...
@@ -3267,7 +3273,8 @@ namespace Cdy.Tag
public
static
Dictionary
<
DateTime
,
MemoryBlock
>
ReadTagDataBlock
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
List
<
DateTime
>
dataTimes
,
out
int
timetick
)
{
int
fileDuration
,
blockDuration
=
0
;
var
blockpointer
=
datafile
.
ReadTargetBlockAddress
(
tid
,
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
tagCount
=
0
;
var
blockIndex
=
datafile
.
ReadTagIndexInDataPointer
(
tid
,
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
blockcount
=
fileDuration
*
60
/
blockDuration
;
var
startTime
=
datafile
.
ReadDateTime
(
16
);
...
...
@@ -3290,12 +3297,13 @@ namespace Cdy.Tag
throw
new
Exception
(
"DataPointer index is out of total block number"
);
}
var
dataPointer
=
datafile
.
ReadLong
(
blockpointer
+
dindex
*
12
);
var
datasize
=
datafile
.
ReadInit
(
blockpointer
+
dindex
*
12
+
8
);
var
dataPointer
=
datafile
.
ReadLong
(
blockIndex
*
8
+
dindex
*
tagCount
*
8
);
//读取DataBlock的地址
var
datasize
=
datafile
.
ReadInit
(
dataPointer
);
//读取DataBlock 的大小
if
(!
rtmp
.
ContainsKey
(
dataPointer
))
{
var
rmm
=
datafile
.
Read
(
dataPointer
,
datasize
);
var
rmm
=
datafile
.
Read
(
dataPointer
+
4
,
datasize
);
re
.
Add
(
vdd
,
rmm
);
rtmp
.
Add
(
dataPointer
,
rmm
);
}
...
...
@@ -3319,7 +3327,8 @@ namespace Cdy.Tag
public
static
Dictionary
<
MemoryBlock
,
List
<
DateTime
>>
ReadTagDataBlock2
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
List
<
DateTime
>
dataTimes
,
out
int
timetick
)
{
int
fileDuration
,
blockDuration
=
0
;
var
blockpointer
=
datafile
.
ReadTargetBlockAddress
(
tid
,
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
tagCount
=
0
;
var
blockIndex
=
datafile
.
ReadTagIndexInDataPointer
(
tid
,
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
blockcount
=
fileDuration
*
60
/
blockDuration
;
var
startTime
=
datafile
.
ReadDateTime
(
16
);
...
...
@@ -3342,8 +3351,9 @@ namespace Cdy.Tag
throw
new
Exception
(
"DataPointer index is out of total block number"
);
}
var
dataPointer
=
datafile
.
ReadLong
(
blockpointer
+
dindex
*
12
);
var
datasize
=
datafile
.
ReadInit
(
blockpointer
+
dindex
*
12
+
8
);
var
dataPointer
=
datafile
.
ReadLong
(
blockIndex
*
8
+
dindex
*
tagCount
*
8
);
//读取DataBlock的地址
var
datasize
=
datafile
.
ReadInit
(
dataPointer
);
//读取DataBlock 的大小
if
(!
rtmp
.
ContainsKey
(
dataPointer
))
{
...
...
@@ -3387,7 +3397,8 @@ namespace Cdy.Tag
public
static
Dictionary
<
MemoryBlock
,
Tuple
<
DateTime
,
DateTime
>>
ReadTagDataBlock2
(
this
DataFileSeriserbase
datafile
,
int
tid
,
long
offset
,
DateTime
start
,
DateTime
end
,
out
int
timetick
)
{
int
fileDuration
,
blockDuration
=
0
;
var
blockpointer
=
datafile
.
ReadTargetBlockAddress
(
tid
,
offset
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
tagCount
=
0
;
var
blockIndex
=
datafile
.
ReadTagIndexInDataPointer
(
tid
,
offset
,
out
tagCount
,
out
fileDuration
,
out
blockDuration
,
out
timetick
);
int
blockcount
=
fileDuration
*
60
/
blockDuration
;
var
startTime
=
datafile
.
ReadDateTime
(
16
);
...
...
@@ -3416,8 +3427,9 @@ namespace Cdy.Tag
throw
new
Exception
(
"DataPointer index is out of total block number"
);
}
var
dataPointer
=
datafile
.
ReadLong
(
blockpointer
+
dindex
*
12
);
var
datasize
=
datafile
.
ReadInit
(
blockpointer
+
dindex
*
12
+
8
);
var
dataPointer
=
datafile
.
ReadLong
(
blockIndex
*
8
+
dindex
*
tagCount
*
8
);
//读取DataBlock的地址
var
datasize
=
datafile
.
ReadInit
(
dataPointer
);
//读取DataBlock 的大小
var
rmm
=
datafile
.
Read
(
dataPointer
,
datasize
);
if
(!
re
.
ContainsKey
(
rmm
))
...
...
DataRunner/His/HisQuery/TagHeadOffsetManager.cs
浏览文件 @
45d7b693
...
...
@@ -27,7 +27,7 @@ namespace Cdy.Tag
/// <summary>
///
/// </summary>
Dictionary
<
HeadOffsetKey
,
Dictionary
<
int
,
long
>>
mHeadOffsets
=
new
Dictionary
<
HeadOffsetKey
,
Dictionary
<
int
,
long
>>();
Dictionary
<
HeadOffsetKey
,
Dictionary
<
int
,
int
>>
mHeadOffsets
=
new
Dictionary
<
HeadOffsetKey
,
Dictionary
<
int
,
int
>>();
#
endregion
...
Variables
...
...
...
@@ -63,7 +63,7 @@ namespace Cdy.Tag
/// <param name="sum"></param>
/// <param name="count"></param>
/// <param name="offset"></param>
public
void
Add
(
long
sum
,
int
count
,
Dictionary
<
int
,
long
>
offset
)
public
void
Add
(
long
sum
,
int
count
,
Dictionary
<
int
,
int
>
offset
)
{
HeadOffsetKey
key
=
new
HeadOffsetKey
(
count
,
sum
);
mHeadOffsets
.
Add
(
key
,
offset
);
...
...
@@ -75,7 +75,7 @@ namespace Cdy.Tag
/// <param name="sum"></param>
/// <param name="count"></param>
/// <returns></returns>
public
Dictionary
<
int
,
long
>
Get
(
long
sum
,
int
count
)
public
Dictionary
<
int
,
int
>
Get
(
long
sum
,
int
count
)
{
HeadOffsetKey
key
=
new
HeadOffsetKey
(
count
,
sum
);
return
mHeadOffsets
[
key
];
...
...
DataRunner/His/Serise/DataFileSeriserbase.cs
浏览文件 @
45d7b693
...
...
@@ -103,6 +103,7 @@ namespace Cdy.Tag
/// <param name="start"></param>
public
abstract
void
Write
(
byte
value
,
long
start
);
/// <summary>
///
/// </summary>
...
...
@@ -118,6 +119,15 @@ namespace Cdy.Tag
/// <param name="start"></param>
public
abstract
void
Write
(
List
<
byte
[
]>
source
,
long
start
);
/// <summary>
///
/// </summary>
/// <param name="source"></param>
/// <param name="start"></param>
/// <param name="offset"></param>
/// <param name="len"></param>
public
abstract
void
Write
(
List
<
byte
[
]>
source
,
long
start
,
int
offset
,
int
len
);
/// <summary>
///
/// </summary>
...
...
DataRunner/His/Serise/LocalFileSeriser.cs
浏览文件 @
45d7b693
...
...
@@ -334,28 +334,48 @@ namespace Cdy.Tag
/// </summary>
/// <param name="source"></param>
/// <param name="start"></param>
public
override
void
Write
(
List
<
byte
[
]>
source
,
long
start
)
public
override
void
Write
(
List
<
byte
[
]>
source
,
long
start
,
int
offset
,
int
len
)
{
bool
isNeedAllCopy
=
false
;
List
<
Tuple
<
int
,
int
,
int
>>
copyIndex
=
new
List
<
Tuple
<
int
,
int
,
int
>>();
int
sstart
=
offset
;
int
count
=
0
;
int
precount
=
0
;
int
copyed
=
0
;
for
(
int
i
=
0
;
i
<
source
.
Count
;
i
++)
{
if
(
isNeedAllCopy
)
{
mStream
.
Write
(
source
[
i
],
0
,
source
[
i
].
Length
);
}
else
precount
=
count
;
count
=
source
[
i
].
Length
+
count
;
if
(
count
>
sstart
)
{
precount
=
count
;
count
=
source
[
i
].
Length
+
count
;
if
(
count
>
start
)
var
ltmp
=
count
-
sstart
;
if
(
ltmp
>
(
len
-
copyed
))
{
mStream
.
Write
(
source
[
i
],
(
int
)(
start
-
precount
),
(
int
)(
count
-
start
));
isNeedAllCopy
=
true
;
copyIndex
.
Add
(
new
Tuple
<
int
,
int
,
int
>(
i
,
sstart
-
precount
,
len
-
copyed
));
break
;
}
else
{
copyIndex
.
Add
(
new
Tuple
<
int
,
int
,
int
>(
i
,
sstart
-
precount
,
ltmp
));
sstart
+=
ltmp
;
copyed
+=
ltmp
;
}
}
}
mStream
.
Position
=
start
;
foreach
(
var
vv
in
copyIndex
)
{
mStream
.
Write
(
source
[
vv
.
Item1
],
vv
.
Item2
,
vv
.
Item3
);
}
}
public
override
void
Write
(
List
<
byte
[
]>
source
,
long
start
)
{
mStream
.
Position
=
start
;
for
(
int
i
=
0
;
i
<
source
.
Count
;
i
++)
{
mStream
.
Write
(
source
[
i
],
0
,
source
[
i
].
Length
);
}
}
...
...
DataRunner/His/Serise/SeriseEnginer.cs
浏览文件 @
45d7b693
...
...
@@ -27,6 +27,7 @@ using System.Threading.Tasks;
RegionHead: PreDataRegionPoint(8) + NextDataRegionPoint(8) + Datatime(8)+ tagcount(4)+ tagid sum(8)+file duration(4)+block duration(4)+Time tick duration(4)
DataBlockPoint Area: [ID]+[block Point]
[block point]: [[tag1 point,tag2 point,....][tag1 point,tag2 point,...].....] 以时间单位对变量的数去区指针进行组织
DataBlock Area: [block size + data block]
*/
...
...
@@ -187,6 +188,7 @@ namespace Cdy.Tag
if
(
mIsClosed
)
break
;
SaveToFile
();
mProcessMemory
.
Clear
();
mProcessMemory
.
MakeMemoryNoBusy
();
}
closedEvent
.
Set
();
...
...
@@ -202,20 +204,25 @@ namespace Cdy.Tag
2. 拷贝数据块
3. 更新数据块指针
*/
LoggerService
.
Service
.
Info
(
"SeriseEnginer"
,
"********开始执行存储********"
);
Dictionary
<
int
,
long
>
memoryAddrs
=
new
Dictionary
<
int
,
long
>();
var
count
=
mProcessMemory
.
ReadInt
(
0
);
mCurrentTime
=
mProcessMemory
.
ReadDateTime
(
4
);
int
offset
=
12
;
for
(
int
i
=
0
;
i
<
count
;
i
++)
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
var
id
=
mProcessMemory
.
ReadInt
(
offset
);
var
addr
=
mProcessMemory
.
ReadLong
(
offset
+
4
);
offset
+=
12
;
var
id
=
mProcessMemory
.
ReadInt
(
offset
);
var
addr
=
mProcessMemory
.
ReadLong
(
offset
+
4
);
memoryAddrs
.
Add
(
id
,
addr
);
offset
+=
12
;
}
Parallel
.
ForEach
(
memoryAddrs
,
(
keyval
)
=>
{
mSeriseFile
[
keyval
.
Key
].
SaveToFile
(
mProcessMemory
,
keyval
.
Value
,
mCurrentTime
);
});
LoggerService
.
Service
.
Info
(
"SeriseEnginer"
,
">>>>>>>>>完成执行存储>>>>>>>"
);
}
#
endregion
...
Methods
...
...
...
@@ -264,6 +271,10 @@ namespace Cdy.Tag
private
MemoryBlock
mHeadMemory
;
private
MemoryBlock
mBlockPointMemory
;
private
long
mBlockPointOffset
=
0
;
private
VarintCodeMemory
mTagIdMemoryCach
;
//变量ID校验和
...
...
@@ -375,6 +386,7 @@ namespace Cdy.Tag
mPreDataRegion
=
mCurrentDataRegion
;
mBlockPointOffset
=
mCurrentDataRegion
+
mBlockPointOffset
;
}
...
...
@@ -386,7 +398,7 @@ namespace Cdy.Tag
{
//文件头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+tagcount(4)+ tagid sum(8) +file duration(4)+ block duration(4)+Time tick duration(4)+ { len + [tag id]}+ [data blockpoint(8)]
int
blockcount
=
FileDuration
*
60
/
BlockDuration
;
int
len
=
GetDataRegionHeaderLength
()
+
mTagCount
*
(
blockcount
*
4
);
int
len
=
GetDataRegionHeaderLength
()
+
mTagCount
*
(
blockcount
*
8
);
len
+=
mTagIdMemoryCach
.
Position
+
4
;
if
(
mHeadMemory
!=
null
)
...
...
@@ -405,6 +417,15 @@ namespace Cdy.Tag
mHeadMemory
=
new
MemoryBlock
(
len
);
}
if
(
mBlockPointMemory
==
null
)
{
mBlockPointMemory
=
new
MemoryBlock
(
mTagCount
*
8
);
}
else
{
mBlockPointMemory
.
Clear
();
}
mHeadMemory
.
Position
=
0
;
mHeadMemory
.
Write
((
long
)
mPreDataRegion
);
//更新Pre DataRegion 指针
mHeadMemory
.
Write
((
long
)
0
);
//更新Next DataRegion 指针
...
...
@@ -421,6 +442,8 @@ namespace Cdy.Tag
mHeadMemory
.
Write
(
mTagIdMemoryCach
.
Position
);
//写入压缩后的数组的长度
mHeadMemory
.
Write
(
mTagIdMemoryCach
.
Buffer
,
0
,
mTagIdMemoryCach
.
Position
);
//写入压缩数据
mBlockPointOffset
=
mHeadMemory
.
Position
;
return
len
;
}
...
...
@@ -432,18 +455,21 @@ namespace Cdy.Tag
#
endregion
...
Interfaces
...
/// <summary>
/// 更新数据块文件指针
/// </summary>
/// <param name="id"></param>
/// <param name="datapointer"></param>
public
void
UpdateDataBlockPointer
(
int
id
,
long
datapointer
,
DateTime
dateTime
)
{
int
bindex
=
((
dateTime
.
Hour
-
FileStartHour
)
*
60
+
dateTime
.
Minute
)
/
BlockDuration
;
int
icount
=
id
/
TagCountOneFile
;
long
ids
=
CurrentDataRegion
+
mIdAddrs
[
id
]
+
bindex
*
8
;
//当前数据区域地址+数据指针的起始地址+指针偏移
FileWriter
.
Write
(
BitConverter
.
GetBytes
(
datapointer
),
ids
);
}
///// <summary>
///// 更新数据块文件指针
///// </summary>
///// <param name="id"></param>
///// <param name="datapointer"></param>
//public void UpdateDataBlockPointer(int id, long datapointer,int bid)
//{
// //int bindex = ((dateTime.Hour - FileStartHour) * 60 + dateTime.Minute) / BlockDuration;
// int icount = id / TagCountOneFile;
// // long ids = CurrentDataRegion + mIdAddrs[id] + bid * 8; //当前数据区域地址+数据指针的起始地址+指针偏移
// mBlockPointMemory.WriteLong(mIdAddrs[id] + bid * 8, datapointer);
// // FileWriter.Write(BitConverter.GetBytes(datapointer), ids);
//}
/// <summary>
///
...
...
@@ -537,15 +563,19 @@ namespace Cdy.Tag
public
void
Init
()
{
mIdAddrs
.
Clear
();
long
offset
=
GetDataRegionHeaderLength
()
+
CalTagIdsSize
();
//long offset = GetDataRegionHeaderLength() + CalTagIdsSize();
long
offset
=
0
;
int
blockcount
=
FileDuration
*
60
/
BlockDuration
;
var
vv
=
ServiceLocator
.
Locator
.
Resolve
<
ITagQuery
>();
var
tags
=
vv
.
ListAllTags
().
Where
(
e
=>
e
.
Id
>=
Id
*
TagCountOneFile
&&
e
.
Id
<
(
Id
+
1
)
*
TagCountOneFile
).
OrderBy
(
e
=>
e
.
Id
);
foreach
(
var
vtag
in
tags
)
{
mIdAddrs
.
Add
(
vtag
.
Id
,
offset
);
offset
+=
(
blockcount
*
8
);
//offset += (blockcount * 8);
offset
+=
8
;
}
CalTagIdsSize
();
}
/// <summary>
...
...
@@ -575,7 +605,7 @@ namespace Cdy.Tag
}
else
{
if
(
mFileWriter
.
Length
<
8
)
if
(
mFileWriter
.
Length
<
72
)
{
AppendFileHeader
(
time
,
this
.
DatabaseName
);
//新建文件
...
...
@@ -618,6 +648,8 @@ namespace Cdy.Tag
3. 更新数据块指针
*/
LoggerService
.
Service
.
Info
(
"SeriseFileItem"
+
Id
,
"*********开始执行存储**********"
);
var
totalsize
=
mProcessMemory
.
ReadInt
(
dataOffset
);
var
count
=
mProcessMemory
.
ReadInt
(
dataOffset
+
4
);
mTagCount
=
count
;
...
...
@@ -638,13 +670,17 @@ namespace Cdy.Tag
if
(!
CheckFile
(
time
))
return
;
offset
=
8
;
offset
=
8
+
dataOffset
;
long
start
=
count
*
8
+
offset
;
//计算出数据起始地址
LoggerService
.
Service
.
Info
(
"SeriseFileItem"
+
Id
,
"写入数据 "
+
(
totalsize
-
start
)/
1024.0
/
1024
+
" m"
);
this
.
mFileWriter
.
Append
(
mProcessMemory
.
Buffers
,
(
int
)
start
,
(
int
)(
totalsize
-
start
));
//直接拷贝数据块
var
pos
=
mFileWriter
.
CurrentPostion
;
LoggerService
.
Service
.
Info
(
"SeriseFileItem"
+
Id
,
"开始更新指针区域"
);
FileStartHour
=
(
time
.
Hour
/
FileDuration
)*
FileDuration
;
FileStartHour
=
time
.
Hour
/
File
Duration
;
int
bid
=
((
time
.
Hour
-
FileStartHour
)
*
60
+
time
.
Minute
)
/
Block
Duration
;
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
...
...
@@ -652,12 +688,23 @@ namespace Cdy.Tag
offset
+=
4
;
var
addr
=
mProcessMemory
.
ReadInt
(
offset
)
+
mCurrentDataRegion
;
offset
+=
4
;
UpdateDataBlockPointer
(
id
,
addr
,
time
);
mBlockPointMemory
.
WriteLong
(
mIdAddrs
[
id
],
addr
);
}
mCurrentDataRegion
=
pos
;
var
pointAddr
=
mBlockPointOffset
+
count
*
8
*
bid
;
LoggerService
.
Service
.
Info
(
"SeriseFileItem"
+
Id
,
"开始写入指针区域到文件 offset:"
+
pointAddr
+
" Size:"
+
mBlockPointMemory
.
AllocSize
/
1024.0
/
1024
+
" m"
);
mFileWriter
.
Write
(
mBlockPointMemory
.
Buffers
,
pointAddr
,
0
,
(
int
)
mBlockPointMemory
.
AllocSize
);
LoggerService
.
Service
.
Info
(
"SeriseFileItem"
+
Id
,
"更新指针区域完成"
);
Flush
();
LoggerService
.
Service
.
Info
(
"SeriseEnginer"
+
Id
,
">>>>>>>>>完成执行存储>>>>>>>>>"
);
}
/// <summary>
...
...
DataRunner/His/Tag/HisRunTag.cs
浏览文件 @
45d7b693
...
...
@@ -20,6 +20,8 @@ namespace Cdy.Tag
#
region
...
Variables
...
private
byte
[]
headBytes
;
#
endregion
...
Variables
...
#
region
...
Events
...
...
...
@@ -97,6 +99,19 @@ namespace Cdy.Tag
#
region
...
Methods
...
public
void
Init
()
{
var
hbyts
=
new
List
<
byte
>(
19
);
hbyts
.
AddRange
(
BitConverter
.
GetBytes
(
this
.
HisQulityStartAddr
-
this
.
TimerValueStartAddr
));
hbyts
.
Add
((
byte
)
this
.
Type
);
hbyts
.
Add
((
byte
)
this
.
TagType
);
hbyts
.
Add
((
byte
)
this
.
CompressType
);
hbyts
.
AddRange
(
BitConverter
.
GetBytes
(
CompressParameter1
));
hbyts
.
AddRange
(
BitConverter
.
GetBytes
(
CompressParameter2
));
hbyts
.
AddRange
(
BitConverter
.
GetBytes
(
CompressParameter3
));
headBytes
=
hbyts
.
ToArray
();
}
/// <summary>
///
/// </summary>
...
...
@@ -122,21 +137,24 @@ namespace Cdy.Tag
{
//数据块头部结构
//数据区大小(int)+记录类型(byte)+变量类型(byte)+压缩类型(byte)+压缩参数1(float)+压缩参数2(float)+压缩参数3(float)
//var bids = BitConverter.GetBytes(this.HisQulityStartAddr - this.HisValueStartAddr);
//Buffer.BlockCopy(HisAddr, BlockHeadStartAddr, bids, 0, bids.Length);
HisAddr
.
WriteInt
(
BlockHeadStartAddr
,
this
.
HisQulityStartAddr
-
this
.
TimerValueStartAddr
);
//写入记录类型
HisAddr
.
WriteByte
(
BlockHeadStartAddr
+
4
,
(
byte
)
this
.
Type
);
//写入变量类型
HisAddr
.
WriteByte
(
BlockHeadStartAddr
+
5
,
(
byte
)
this
.
TagType
);
//写入压缩类型
HisAddr
.
WriteByte
(
BlockHeadStartAddr
+
6
,
(
byte
)
this
.
CompressType
);
//写入压缩附属参数
HisAddr
.
WriteFloat
(
BlockHeadStartAddr
+
7
,
CompressParameter1
);
HisAddr
.
WriteFloat
(
BlockHeadStartAddr
+
11
,
CompressParameter2
);
HisAddr
.
WriteFloat
(
BlockHeadStartAddr
+
15
,
CompressParameter3
);
HisAddr
.
WriteBytes
(
BlockHeadStartAddr
,
headBytes
);
//HisAddr.WriteInt(BlockHeadStartAddr, this.HisQulityStartAddr - this.TimerValueStartAddr);
////写入记录类型
//HisAddr.WriteByte(BlockHeadStartAddr+4, (byte)this.Type);
////写入变量类型
//HisAddr.WriteByte(BlockHeadStartAddr+5, (byte)this.TagType);
////写入压缩类型
//HisAddr.WriteByte(BlockHeadStartAddr+6, (byte)this.CompressType);
////写入压缩附属参数
//HisAddr.WriteFloat(BlockHeadStartAddr + 7, CompressParameter1);
//HisAddr.WriteFloat(BlockHeadStartAddr + 11, CompressParameter2);
//HisAddr.WriteFloat(BlockHeadStartAddr + 15, CompressParameter3);
}
/// <summary>
...
...
DataRunner/Runner.cs
浏览文件 @
45d7b693
...
...
@@ -57,6 +57,15 @@ namespace Cdy.Tag
#
region
...
Constructor
...
/// <summary>
///
/// </summary>
static
Runner
()
{
//注册日志
ServiceLocator
.
Locator
.
Registor
<
ILog
>(
new
ConsoleLogger
());
}
#
endregion
...
Constructor
...
#
region
...
Properties
...
...
...
@@ -133,12 +142,12 @@ namespace Cdy.Tag
InitPath
();
mHisFileManager
=
new
DataFileManager
(
mDatabaseName
);
LoadHisDatabase
();
mHisFileManager
.
TagCountOneFile
=
mHisDatabase
.
Setting
.
TagCountOneFile
;
var
task
=
mHisFileManager
.
Int
();
LoadRealDatabase
();
LoadHisDatabase
();
realEnginer
=
new
RealEnginer
(
mDatabase
);
realEnginer
.
Init
();
...
...
@@ -169,8 +178,7 @@ namespace Cdy.Tag
/// </summary>
private
void
RegistorInterface
()
{
//注册日志
ServiceLocator
.
Locator
.
Registor
<
ILog
>(
new
ConsoleLogger
());
ServiceLocator
.
Locator
.
Registor
<
IRealData
>(
realEnginer
);
ServiceLocator
.
Locator
.
Registor
<
IRealDataNotify
>(
realEnginer
);
...
...
@@ -207,11 +215,13 @@ namespace Cdy.Tag
/// <param name="database"></param>
public
async
void
StartAsync
(
string
database
)
{
LoggerService
.
Service
.
Info
(
"Runner"
,
database
+
"开始启动"
);
await
InitAsync
(
database
);
seriseEnginer
.
Start
();
compressEnginer
.
Start
();
hisEnginer
.
Start
();
mIsStarted
=
true
;
LoggerService
.
Service
.
Info
(
"Runner"
,
database
+
"启动完成"
);
}
...
...
DataRunner/obj/DataRunner.csproj.nuget.cache
浏览文件 @
45d7b693
{
"version": 1,
"dgSpecHash": "
sieRLC+b0OUVtVeWYf7847K6mKRQhPXydBnCLIK1sgPlJWJhQKaR/pbm2srXfZfVF0u77WbtApAcuxsUufp/VQ
==",
"dgSpecHash": "
DUNETSwgKhTz0klihUqG5gR+EZ0YdrWA4JanZr8d1G6xjmJeWePZoKI25AlRMhZnj5kbbtC2jVzi/eUp8jcgLg
==",
"success": true
}
\ No newline at end of file
DataRunner/obj/DataRunner.csproj.nuget.dgspec.json
浏览文件 @
45d7b693
...
...
@@ -57,7 +57,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -114,7 +114,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -175,7 +175,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
DataRunner/obj/project.assets.json
浏览文件 @
45d7b693
...
...
@@ -102,7 +102,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
DbManager.Desktop/obj/DbManager.Desktop.csproj.nuget.cache
浏览文件 @
45d7b693
{
"version": 1,
"dgSpecHash": "
MgIR1pYmDoUXsbFT2AHPUkZq1BTq/rDkzKxZZF0hfJvX5A9gT+gig2Eh0YEZAPImEcH+7VIb+69Ckb918M0AXQ
==",
"dgSpecHash": "
wWhlHzalLBkFjfrBe3IkqijCYRVsPdS9x3DiI3ggVozvRvDxHVYbl5KO9U/hVoQvdFvGxgHWiWMHGQJ7p6UCug
==",
"success": true
}
\ No newline at end of file
DbManager.Desktop/obj/DbManager.Desktop.csproj.nuget.dgspec.json
浏览文件 @
45d7b693
...
...
@@ -73,7 +73,7 @@
"privateAssets"
:
"none"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
DbManager.Desktop/obj/project.assets.json
浏览文件 @
45d7b693
...
...
@@ -612,7 +612,7 @@
"privateAssets"
:
"none"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
浏览文件 @
45d7b693
无法预览此类型文件
Mars/.vs/Mars/v16/.suo
浏览文件 @
45d7b693
无法预览此类型文件
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
浏览文件 @
45d7b693
无法预览此类型文件
Mars/Mars.sln
浏览文件 @
45d7b693
...
...
@@ -13,15 +13,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataRunner", "..\DataRunner
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cdy.Tag.Common", "..\Cdy.Tag.Common\Cdy.Tag.Common.csproj", "{34F10592-77BF-47D5-B282-3E5856338F97}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cdy.Tag.CoreAPI", "..\Cdy.Tag.CoreAPI\Cdy.Tag.CoreAPI.csproj", "{7E13DDBF-015C-464E-A09F-C5F87FA8143A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cdy.Tag.CommonTests", "..\Cdy.Tag.CommonTests\Cdy.Tag.CommonTests.csproj", "{15DC4D19-A2D0-4624-B83E-12E6466F148C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{1A69E6A7-33B3-4DAF-9D9D-FD7CD474FFD3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataRunnerTests", "..\DataRunnerTests\DataRunnerTests.csproj", "{DF77A949-1A7A-4526-825D-5BF5CC5162E9}"
EndProject
Project("{
FAE04EC0-301F-11D3-BF4B-00C04F79EFBC
}") = "DBDevelopService", "..\DBDevelopService\DBDevelopService.csproj", "{2925BF23-5C16-42C3-97A0-9E0427F41D8F}"
Project("{
9A19103F-16F7-4668-BE54-9A1E7A4F7556
}") = "DBDevelopService", "..\DBDevelopService\DBDevelopService.csproj", "{2925BF23-5C16-42C3-97A0-9E0427F41D8F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -49,10 +47,6 @@ Global
{34F10592-77BF-47D5-B282-3E5856338F97}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34F10592-77BF-47D5-B282-3E5856338F97}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34F10592-77BF-47D5-B282-3E5856338F97}.Release|Any CPU.Build.0 = Release|Any CPU
{7E13DDBF-015C-464E-A09F-C5F87FA8143A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E13DDBF-015C-464E-A09F-C5F87FA8143A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E13DDBF-015C-464E-A09F-C5F87FA8143A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E13DDBF-015C-464E-A09F-C5F87FA8143A}.Release|Any CPU.Build.0 = Release|Any CPU
{15DC4D19-A2D0-4624-B83E-12E6466F148C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15DC4D19-A2D0-4624-B83E-12E6466F148C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15DC4D19-A2D0-4624-B83E-12E6466F148C}.Release|Any CPU.ActiveCfg = Release|Any CPU
...
...
Mars/Program.cs
浏览文件 @
45d7b693
...
...
@@ -24,6 +24,8 @@ namespace Mars
Console
.
Write
(
">"
);
string
[]
cmd
=
Console
.
ReadLine
().
Split
(
new
string
[]
{
" "
},
StringSplitOptions
.
RemoveEmptyEntries
);
if
(
cmd
.
Length
==
0
)
continue
;
string
scmd
=
cmd
[
0
].
ToLower
();
switch
(
scmd
)
{
...
...
Mars/obj/Mars.csproj.nuget.cache
浏览文件 @
45d7b693
{
"version": 1,
"dgSpecHash": "
aaCHivvAbKHyP03fwtf8Xhsm5ys9JWQHQkoROCV5zBzGtRPBkpbht1B49jp1+OJkTUJDT+OUi1qtsKkgHkWmfA
==",
"dgSpecHash": "
Gk42zNpgwZyhJ9BJLUpShp6B/L39JgtJE8RyuyoON1O4IIrkLVn8iVXiLfE95IRXcVDAKuroz3OHfd7x+IXhHw
==",
"success": true
}
\ No newline at end of file
Mars/obj/Mars.csproj.nuget.dgspec.json
浏览文件 @
45d7b693
...
...
@@ -57,7 +57,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -114,7 +114,7 @@
],
"assetTargetFallback"
:
true
,
"warn"
:
true
,
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -175,7 +175,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -238,7 +238,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
},
...
...
@@ -302,7 +302,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
Mars/obj/project.assets.json
浏览文件 @
45d7b693
...
...
@@ -761,7 +761,7 @@
"privateAssets"
:
"all"
}
},
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
0
\\
RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath"
:
"C:
\\
Program Files
\\
dotnet
\\
sdk
\\
3.1.10
1
\\
RuntimeIdentifierGraph.json"
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录