Файлы памяти уничтожаются сторонним программным обеспечением

#vb.net #memory-management #file-io

#vb.net #управление памятью #file-io

Вопрос:

У меня есть коллекция приложений, которые полагаются на файлы памяти. Я создаю их с помощью постоянного приложения, затем 3 приложения обновляют файлы данными GPS, IMU и switch, а 3 приложения считывают текущее состояние и генерируют команды для сервоконтроллеров. Это отлично работало годами, но сегодня приложения завершились сбоем из-за отсутствия файлов памяти, когда я запустил стороннее приложение для управления камерой на c #.

Я подозреваю, что другое приложение перезаписывает область памяти. Есть ли способ защитить эти файлы памяти.

Я нахожусь в Visual Studio 2017, Win10 / 64 и .net 4.6.1

Я включил код создания и выборки для чтения и записи — все они работали годами. Я обновил систему до текущей версии .net 4.6.1, и без стороннего приложения система работает часами без ошибок. В тот момент, когда я запускаю скомпилированное приложение c # app, файлы памяти исчезают. У меня нет доступа к исходному коду, и я безнадежен с C #.

Сейчас понятия не имею, одно из решений — установить новый процессор и запустить приложение третьей стороны в отдельном окне. Между моими приложениями и ним нет связи.

 I create with :

Dim LoopForever As Boolean = True
Dim AHRS_Memory_File_Name As String = "AHRSMemoryData"
Dim GPS_Memory_File_Name As String = "GPSMemoryData"
Dim Switch_Memory_File_Name As String = "SwitchMemoryData"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
    Dim MMS = MemoryMappedFile.CreateNew(Switch_Memory_File_Name, 20, 
 MemoryMappedFileAccess.ReadWrite)
    Dim GPS = MemoryMappedFile.CreateNew(GPS_Memory_File_Name, 200, 
MemoryMappedFileAccess.ReadWrite)
    Dim AHRS = MemoryMappedFile.CreateNew(AHRS_Memory_File_Name, 200, 
MemoryMappedFileAccess.ReadWrite)
    Do Until LoopForever = False
        Thread.Sleep(10000)
    Loop

End Sub

A sample Write is 

Sub WriteGPS_To_Memory()
    Dim GPS_MMF = MemoryMappedFile.OpenExisting(GPS_Memory_File_Name)
    Dim Bytes As Byte()

    ' This is the format of the current gps memory message

    outMessage = GPSSpeedIn amp; "," amp; GPSBearing amp; "," amp; GPSLongitude amp; "," 
     amp; GPSLatitude amp; "," amp; GarminMagDeviationText amp; "," amp; GPSMessageCount 
      amp; "," amp; GPSAltitude amp; ","

    Bytes = StrToByteArray(outMessage)

    Try
        Using writer = GPS_MMF.CreateViewAccessor(0, Bytes.Length)
            writer.WriteArray(Of Byte)(0, Bytes, 0, Bytes.Length)
            ' writer.Dispose()
        End Using
    Catch ex As Exception
        MsgBox("mem write error = " amp; ex.ToString)

    End Try

And a sample read is 

    Dim MMF = MemoryMappedFile.OpenExisting(MEMS_Memory_File_Name)
    Using reader = MMF.CreateViewAccessor(0, 200, 
    MemoryMappedFileAccess.Read)

        Dim NewByteString = New Byte(200) {}
        reader.ReadArray(Of Byte)(0, NewByteString, 0, 
        NewByteString.Length)

        InMessage = Convert.ToString(NewByteString)

        teststring = ""
        CycleCount = CycleCount   1
        teststring = BitConverter.ToString(NewByteString)
        For i As Integer = 0 To NewByteString.Length - 1

            AHRS_CommDataIn = 
        System.Text.Encoding.ASCII.GetString(NewByteString)
        Next
         End Using
          MMF.Dispose()
  

Лучший результат — найти способ защитить эти файлы. Я нахожусь в США, поставщик в Израиле и не особенно отзывчив.

На это не хватает времени, поскольку моя компания использует это программное обеспечение для определения местоположения водоемов, в которых обитают комары (ненавижу этих вредителей), которые распространяют вирус Западного Нила, Денге и малярию. Сегодня мы очистили миссию площадью 300 кв. миль, затронувшую около 500 тыс. человек.

Ответ №1:

Проблема, по-видимому, была в стороннем программном обеспечении — они выпустили обновленную программу в тот день, когда мы опубликовали проблему на их сайте поддержки — так что мы, должно быть, были не на единственном сайте с этой проблемой