EDNA实时数据库两种取历史数据值的方式

本文通过两种不同的DnaGetHist函数实现方式——逐条读取与批量读取,对比了它们在历史数据查询中的性能表现。实验结果显示,批量读取的方式性能提高了约10倍,这与磁盘I/O性能密切相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. DnaGetNextHistUTC函数:根据游标一个一个值取

int i = EzDNAApiNet.EzDnaApi.History.DnaGetHistDirectRawUTC(szServer,szPoint, Start, End, ref key);

if (i == 0)
{
long l1 = DateTime.Now.Ticks / 10000;

int s = 0;

int i1 = 0;

while (i1 == 0)
{
i1 = EzDNAApiNet.EzDnaApi.History.DnaGetNextHistUTC(key, ref pdValue, ref ptTime, szStatus, 20);

if (pdValue >= dHighLimit)
{
m_ulHighCount++;
}

if (pdValue<= dLowLimit)
{
m_ulLowCount++;
}

if (i1 == 0)
{

//记住开始时间
if (s == 0)
{
EzDNAApiNet.EzDnaApi.Translator.UCTToStringTime(ptTime, szTime, 30);

sStart = szTime.ToString();
}

s++;
}
}

//记住结束时间
EzDNAApiNet.EzDnaApi.Translator.UCTToStringTime(ptTime, szTime, 30);
sEnd = szTime.ToString();

long l2 = DateTime.Now.Ticks / 10000 - l1;

}

2. DnaGetNextHistBlockSmall函数:一次读取批量数据

int i = EzDNAApiNet.EzDnaApi.History.DnaGetHistDirectRawUTC(szServer,szPoint, Start, End, ref key);
StringBuilder szTime = new StringBuilder(30);

double[] pszValueList = new double[1000000];
int[] pszTimeList = new int[1000000];
ushort[] pszStatusList = new ushort[1000000];

string sStart = "";
string eEnd = "";

if (i == 0)
{
long l1 = DateTime.Now.Ticks / 10000;

int s = 0;

do
{

i1 = EzDNAApiNet.EzDnaApi.History.DnaGetNextHistBlockSmall(key, 1000000, out pnCount, pszValueList, pszTimeList, pszStatusList);

if (0 == i1)
{
for (int j = 0; j < pnCount; j++)
{
//开始时间
if (j == 0)
{

EzDNAApiNet.EzDnaApi.Translator.UCTToStringTime(pszTimeList[j], szTime, 30);

sStart = szTime.ToString();

}
else if (j == pnCount-1)
{
//结束时间
EzDNAApiNet.EzDnaApi.Translator.UCTToStringTime(pszTimeList[j], szTime, 30);
eEnd = szTime.ToString();

}

s++;
}

}
}
while (0 == i1);

long l2 = DateTime.Now.Ticks / 10000 - l1;

方式2比方式1性能有10倍的提高。当然,历史数据查询与磁盘IO性能有很大关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值