Я унаследовал наполовину завершенное приложение, которое, похоже, использует модель, которая, я не уверен, может надежно работать.
Это веб-служба ASP.NET, которая при каждом вызове загружает неуправляемый C ++ .DLLиспользуя
[DllImport ( "kernel32.dll" , EntryPoint = "LoadLibraryA" )]
public static extern int LoadLibrary( string lpLibFileName );
, а затем совершает несколько вызовов к нему, например,
[DllImport(@"MyUnamanagedDLL.dll")]
public static extern string DoStuff( );
В неуправляемом C ++ .dll он использует одноэлементный режим для удержания состояния между вызовами.Это так, что он должен только инициализироваться один раз и загружать кучу медленных вещей с диска и базы данных, а не при каждом вызове веб-службы, поскольку это слишком медленно.
Таким образом, каждый вызов в неуправляемый .dll сначала вызывает Getinstance() Если экземпляр имеет значение null, он инициализирует его и перезагружает все, если нет, он предполагает, что он готов к работе.
FreeLibrary не вызывается каждый раз в веб-службе, так как я предполагаю, что это приведет к тому, что неуправляемый класскаждый раз переинициализироваться.
Является ли эта модель вообще надежной?Можете ли вы убедиться, что если веб-служба выключена, то неуправляемое состояние очищается правильно?Можете ли вы убедиться, что вы получите надежный одноэлементный экземпляр между вызовами loadlibrary?