Принудительный вызов GC.Collect

Есть .net класс. Этот класс создается в нативном коде при помощи создания COM-объекта.

Этот класс работает с внешними файлами. Так вот, эти файлы невозможно удалить даже после удаления созданного объекта. Я так понимаю, что причина в том, что даже после того, как на объект удалились все ссылки сам объект продолжает жить, пока его на вычистит сборщик мусора.

Вопрос - а можно ли как-то вызвать сборщик мусора из нативного кода?

Исходников класса нет.

Update

Декомпилировал сборку. Вот проблемный метод

public void SetImageSource(int index, string s)
{
  if (this.markLayer2 == null || index >= this.markLayer2.Graphics.Count)
    return;
  PictureMarkerSymbol symbol = (PictureMarkerSymbol) this.markLayer2.Graphics[index].Symbol;
  double num1 = 0.0;
  double num2 = 0.0;
  try
  {
    FileStream fileStream = new FileStream(s, FileMode.Open, FileAccess.Read, FileShare.Read);
    byte[] numArray = new byte[fileStream.Length];
    fileStream.Read(numArray, 0, (int) fileStream.Length);
    symbol.SetSource(numArray);
    symbol.YOffset = num2 / 2.0;
    symbol.XOffset = num1 / 2.0;
  }
  catch (Exception ex)
  {
  }
}

После него файл блокируется. Я так понимаю, что проблема в отсутствии using для FileStream и никакими принудительными вызовами Dispose для внешнего объекта тут не обойдешься. Нужен именно принудительный вызов сборщика


Ответы (1 шт):

Автор решения: Alex Varyushin

В идеале не использовать этот код! Но если нет выхода, попробуй создать FileStream по имени и закрыть его с помощью метода Close https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream.close?view=netframework-1.1

→ Ссылка