我正在使用带有c#驱动程序的mongoDB。我需要使用计时器功能每300毫秒插入1000条记录。我所看到的是,操作系统使用的内存会慢慢增加,直到系统卡住。 我不明白mongoDB是否能够做到这一点。 通过查看db_stats,我可以看到在执行应用程序期间页面错误增加了。
以下是代码:
//Timer elapsed function (called every 300ms)
Private Function NewDataReceived(ByVal arBytes As Byte())
dtTimestamp = Now
Task.Run(Sub()
If arBytes.Length >= 60775 Then
oDocument = New PLCDocument
oDocument.srTimestamp = dtTimestamp.ToString("yyyyMMdd_HHmmss_fff")
oDocument.value = Compress(arBytes)
oMongoCollectionPLC.InsertOneAsync(oDocument)
lstEventRecords = New List(Of EventDocument)
For i As Integer = 0 To lstTags.Count - 1
oMyTag = lstTags(i)
Select Case oMyTag.iDataType
Case TagDataTypeEnumerator.eTypeOfDataBOOL
arTempArray = New Byte(0) {}
Array.Copy(arBytes, oMyTag.iTagOffset, arTempArray, 0, 1)
Case TagDataTypeEnumerator.eTypeOfDataINT
arTempArray = New Byte(1) {}
Array.Copy(arBytes, oMyTag.iTagOffset, arTempArray, 0, 2)
Case TagDataTypeEnumerator.eTypeOfDataREAL
arTempArray = New Byte(3) {}
Array.Copy(arBytes, oMyTag.iTagOffset, arTempArray, 0, 4)
Case TagDataTypeEnumerator.eTypeOfDataSTRING
arTempArray = New Byte(49) {}
Array.Copy(arBytes, oMyTag.iTagOffset, arTempArray, 0, 50)
Case TagDataTypeEnumerator.eTypeOfDataBIGINT
arTempArray = New Byte(7) {}
Array.Copy(arBytes, oMyTag.iTagOffset, arTempArray, 0, 8)
End Select
If oMyTag.dtLastTrendInserted.Ticks = 0 Then
'First insert
oMyTag.dtLastTrendInserted = dtTimestamp
oEventRecord = New EventDocument
oEventRecord.iTagID = i
oEventRecord.srTimestamp = dtTimestamp.ToString("yyyyMMdd_HHmmss_fff")
oEventRecord.value = arTempArray
lstEventRecords.Add(oEventRecord)
lstLastValuesInserted.Add(oEventRecord)
Else
bWriteValueToDB = False
Try
Select Case oMyTag.iDataType
'Real -> always write
Case TagDataTypeEnumerator.eTypeOfDataREAL
oEventRecord = New EventDocument
oEventRecord.iTagID = i
oEventRecord.srTimestamp = dtTimestamp.ToString("yyyyMMdd_HHmmss_fff")
oEventRecord.value = arTempArray
lstEventRecords.Add(oEventRecord)
lstLastValuesInserted(i) = oEventRecord
Case TagDataTypeEnumerator.eTypeOfDataBOOL
If BitConverter.ToBoolean(lstLastValuesInserted(i).value, 0) <> BitConverter.ToBoolean(arTempArray, 0) Then
bWriteValueToDB = True
End If
Case TagDataTypeEnumerator.eTypeOfDataINT
If BitConverter.ToInt16(lstLastValuesInserted(i).value, 0) <> BitConverter.ToInt16(arTempArray, 0) Then
bWriteValueToDB = True
End If
Case TagDataTypeEnumerator.eTypeOfDataSTRING
If BitConverter.ToString(lstLastValuesInserted(i).value, 0) <> BitConverter.ToString(arTempArray, 0) Then
bWriteValueToDB = True
End If
Case TagDataTypeEnumerator.eTypeOfDataBIGINT
If BitConverter.ToInt64(lstLastValuesInserted(i).value, 0) <> BitConverter.ToInt64(arTempArray, 0) Then
bWriteValueToDB = True
End If
End Select
Catch ex As Exception
LogErrorManagement.writeLogToFile(String.Format("ERROR! i:{0} lstLastValuesInserted(i).value:{1}", i, lstLastValuesInserted(i).value), ex)
End Try
If bWriteValueToDB Then
oMyTag.dtLastTrendInserted = dtTimestamp
oEventRecord = New EventDocument
oEventRecord.iTagID = i
oEventRecord.srTimestamp = dtTimestamp.ToString("yyyyMMdd_HHmmss_fff")
oEventRecord.value = arTempArray
lstEventRecords.Add(oEventRecord)
lstLastValuesInserted(i) = oEventRecord
End If
End If
Next
oMongoCollectionEvents.InsertManyAsync(lstEventRecords)
'End If
End If
End Sub)
End Function
mongod.exe服务器与应用程序中使用的mongoclient在同一台PC上运行。 安装在我的电脑上的RAM:8gb。
有人能帮助我吗? 感谢