У нас есть CF / .NET 2.0 WinForm с элементом управления ActiveX ShockwaveFlashObject. Программа просматривает расписание контента и снова и снова отображает его на полноэкранном режиме управления, например:
axFlash.BringToFront();
axFlash.Movie = scheduleItem.FilePath;
axFlash.Show();
axFlash.Play();
Это прекрасно работает, но после нескольких дней работы форма, в которой находится элемент управления ActiveX Flash, выдаст исключение, подобное этому:
System.Runtime.InteropServices.SEHException: External component has thrown an exception.
at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
at System.Windows.Forms.Control.DefWndProc(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.AxHost.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Глядя на менеджера задач, я вижу, что наша программа распределила практически всю доступную память на машине. (~ 500MB)
- Являются ли компоненты ActiveX (COM) не управляемыми сборщиком мусора?
- Существует ли какая-либо известная утечка памяти во Flash9.ocx или Flash10.ocx?
- Есть идеи, как получить внешний компонент (в данном случае Flash ActiveX) для освобождения ресурсов без перезапуска программы? Может ли периодически воссоздавать ShockwaveFlashObject с «новыми» исправлениями?
- Может быть, перезапуск программы периодически является единственным хорошим вариантом?