XAML windows никогда не освобождается из памяти, пока не будет выпущена DLL - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема с переполнением памяти в простом приложении.

Приложение скомпилировано как библиотека классов, экспортировано несколько функций, таких как:

[DllExport(CallingConvention = CallingConvention.Cdecl)]
public static void Test(){
RunWindow();
}

Функция RunWindow () открыть простое окно в XAML, затем закройте его вручную.

Thread thread = new Thread(() =>
{
    dialog = new MyDialog();
    dialog.ShowDialog();
});

thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
thread.Join();

И простое окно:

<Application x:Class="test.MyDialog"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     StartupUri="MyDialog.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

Каждый раз, когда я вызываю функцию тестирования из памяти dll, увеличивается после ~ 300 вызовов приложения cra sh из-за исключения StackOverflow. Ниже я прикрепил увеличение памяти после 5 звонков. Image increase after 5 call

Как освободить всю память, используемую dll? Он выпускается только когда я закрываю приложение, открывшее эту DLL.

Я пытался вручную освободить память, но это не помогло.

 GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...