Abbiamo un'applicazione C# .Net che utilizza i servizi WCF. E l'applicazione viene distribuita nel nostro server di produzione in un'applicazione di servizio Windows. Una parte del modulo è responsabile della creazione di file shape ((* .shp, * .dbf) per un'area più piccola che i lavoratori lavoreranno oggi e li invierà a un PDA.Errore casuale: Tentativo di leggere o scrivere memoria protetta
Per scrivere i file di forma, noi utilizzare una terza dll parti, NetTopologySuite
GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
che è anche in C#. (non sono sicuro se qualche dll è l'uso di riferimento il codice non gestito.) Il sistema potrebbe funzionare bene per un po 'dire per una settimana Poi improvvisamente riceviamo un'eccezione dicendo
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
dal metodo Write, in cui scriviamo la raccolta della geometria per modellare i file.
sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
(GeometryCollection è anche da una DLL di terze parti, GeoAPI.dll)
Questo errore porta giù l'intero servizio e lo rende unfunctional. Quindi riavviviamo il servizio e proviamo a eseguire nuovamente gli stessi dati, funzionerebbe bene per un'altra settimana fino a quando non si arresterà di nuovo. Succede solo nella produzione e in momenti casuali. Non siamo stati in grado di trovare la causa del problema.
Molti forum suggeriscono che potrebbe essere a causa di perdite di memoria in alcuni codici non gestiti. Ma non siamo riusciti a trovare quale.
Siamo inoltre pronti a riscrivere la parte che crea nuovi file di forma. Per favore aiutami a risolvere questo problema. Fammi sapere se sono necessari ulteriori dettagli. Grazie in anticipo.
E la tua domanda è? –
È possibile collegare un debugger e osservare lo stack di chiamate? – NtscCobalt
Non è una perdita di memoria, è un GPF http://en.wikipedia.org/wiki/General_protection_fault o in altri termini, un bug nel mondo nativo (ad esempio, un equivalente a NullReferenceException in .NET). Controlla tutte le DLL native di terze parti che stai utilizzando. Uno di loro ha un bug, o non lo stai usando come previsto, e non ti sta dicendo bene –