У нас есть приложение С# .Net, использующее службы WCF. И приложение развернуто на нашем производственном сервере под приложением службы Windows. Одна часть модуля отвечает за создание шейп-файлов ((*.shp, *.dbf) для меньшей области, над которой сегодня будут работать рабочие, и отправки их на КПК.
Для записи шейп-файлов мы используем стороннюю dll, NetTopologySuite.
GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
который также находится в С#. (Я не уверен, что какой-либо dll, на который он ссылается, использует неуправляемый код.) Система может работать нормально какое-то время, скажем, неделю. Затем внезапно мы получаем исключение, говорящее
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
из метода Write, где мы записываем коллекцию геометрии в шейп-файлы.
sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
(GeometryCollection также получен из сторонней dll, GeoAPI.dll)
Эта ошибка останавливает весь сервис и делает его неработоспособным. Затем мы просто перезапустим службу и попытаемся снова запустить те же данные, она будет работать нормально еще неделю, пока снова не выйдет из строя. Это происходит только в производстве и в случайное время. Нам не удалось найти причину проблемы.
Многие форумы предполагают, что это может быть из-за утечек памяти в каком-то неуправляемом коде. Но мы не смогли найти какой.
Мы также готовы переписать часть, создающую новые шейп-файлы. Пожалуйста, помогите мне решить эту проблему. Дайте мне знать, если потребуется дополнительная информация. Заранее спасибо.