Окно не отвечает, после ожидания X ms System.OutOfMemoryException - PullRequest
1 голос
/ 05 апреля 2019

Я реализовал тестовый пример фреймворка белого цвета для одной из функций приложения.Функциональность, которую выполняет тестовый пример, похожа на домашний экран приложения, после нажатия кнопки на домашнем экране он переходит на другой экран, затем на экран посадки, он многократно нажимает на кнопку в течение 50 раз, что выполняет операцию сохранения.данные и чтение данных.

Требование контрольного примера состояло в том, чтобы проверить надежность приложения, и при выполнении этого контрольного примера предполагалось, что он будет работать в течение определенного количества минут, которое вводит пользователь.

Значение для CoreAppXmlConfiguration.Instance.BusyTimeout = время выполнения, введенное пользователем в минутах * 60000 + 5000;

Ниже приведен код для контрольного примера

[TestMethod]
public void TestcaseName()
{
  // Take memory snapshot
  Stopwatch sw = new Stopwatch(); // Stopwatch to compare time if it is equals 
                                  // or exceeds time enter by user.
  sw.Start();
  bool needToRepeate = true;
  While(needToRepeate)
  {
   // do white framework code which will execute functionality

   if(sw.Elapsed >= time enter by user in minutes)
   {
    needToRepeate = false;
    // Take memory snapshot
    sw.stop();
   }
  }
}

Ниже приводится полная найденная трассировка стека

TestStack.White.UIItems.UIActionException: Window didn't respond, after waiting for X ms ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Diagnostics.NtProcessInfoHelper.GetProcessInfos(IntPtr dataPtr)
at System.Diagnostics.NtProcessInfoHelper.GetProcessInfos()
at System.Diagnostics.ProcessManager.GetProcessInfos(String machineName)
at System.Diagnostics.Process.EnsureState(State state)
at System.Diagnostics.Process.get_Threads()
at MS.Internal.Automation.HwndProxyElementProvider.System.Windows.Automation.Provider.IWindowProvider.WaitForInputIdle(Int32 milliseconds)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at MS.Internal.Automation.UiaCoreApi.CheckError(Int32 hr)
at TestStack.White.UIItems.WindowItems.Window.WaitForWindow() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\WindowItems\Window.cs:line 223
at TestStack.White.UIItems.WindowItems.Window.WaitWhileBusy() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\WindowItems\Window.cs:line 184
--- End of inner exception stack trace ---
at TestStack.White.UIItems.WindowItems.Window.WaitWhileBusy() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\WindowItems\Window.cs:line 191
at TestStack.White.UIItems.Actions.Action.Handle(Window window) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\Actions\Action.cs:line 17
at TestStack.White.UIItems.WindowItems.Window.ActionPerformed(Action action) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\WindowItems\Window.cs:line 254
at TestStack.White.InputDevices.Mouse.ActionPerformed(ActionListener actionListener) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\InputDevices\Mouse.cs:line 190
at TestStack.White.InputDevices.Mouse.Click(Point point, ActionListener actionListener) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\InputDevices\Mouse.cs:line 185
at TestStack.White.UIItems.UIItem.PerformClick() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\UIItem.cs:line 265
at TestStack.White.UIItems.UIItem.PerformIfValid(Action action) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\UIItem.cs:line 242
at TestStack.White.UIItems.UIItem.Click() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\UIItem.cs:line 231
at TestStack.White.Bricks.DelegateInvoker.VoidActionInvokerWrapper.Call(Object[] args) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Bricks\DelegateInvoker.cs:line 309
at TestStack.White.Bricks.DynamicProxyInterceptors.Process(IInvocation invocation, CoreInterceptContext interceptedContext) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Bricks\DynamicProxyInterceptors.cs:line 21
at TestStack.White.Interceptors.CoreInterceptor.Intercept(IInvocation invocation) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Interceptors\CoreInterceptor.cs:line 31
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.ButtonProxy.Click()

Фактические результаты: произошла ошибка при непрерывном выполнении тестового примера в течение 7 дней, когда он будет прерываться на 3-й день. Ошибка в журнале: «Окно не отвечает, после ожидания X мс».

где X - значение, введенное пользователем и преобразованное в миллисекунды.

Ожидаемый результат: он должен выполнить тестовый пример, без каких-либо ошибок.

Я пытаюсь выяснить, почему исключение OutofMemory выбрасывается белым фреймворком.

Может кто-нибудь помочь мне в этом, пожалуйста

Заранее спасибо

...