MongoDB - 很多插入,RAM问题

时间:2015-09-11 07:10:38

标签: vb.net mongodb ram

我正在使用带有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。

有人能帮助我吗? 感谢

0 个答案:

没有答案