У нас есть приложение С#.Net, использующее службы WCF. И приложение развертывается на нашем производственном сервере под Windows Service Application. Одна часть модуля отвечает за создание файлов формы (*.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)
Эта ошибка приводит к сбою всей службы и делает ее нефункциональной. Затем мы просто перезапустим службу и попытаемся снова запустить те же данные, она будет работать в течение еще одной недели, пока она не рухнет снова. Это происходит только в производстве и в случайные времена. Мы не смогли найти причину проблемы.
Многие форумы предполагают, что это может быть из-за утечек памяти в некотором неуправляемом коде. Но мы не смогли найти его.
Мы также готовы переписать часть, которая создает новые файлы формы. Пожалуйста, помогите мне решить эту проблему. Дайте мне знать, если требуется более подробная информация. Спасибо заранее.