我在 C#/Winforms 中有一个应用程序,它基本上用于以特定顺序/设置为客户帐户运行测试。它们都是在浏览器中运行的测试,所以我构建了它,以便它可以自动化该过程,因为每次启动客户帐户时都需要运行大约 10-12 个测试。
基本上会发生什么是您输入帐号然后它运行测试。
这是一个示例代码。
public void startTestProcess()
{
if (!cancelTests)
{
testRunning = true;
var tabPage = createTabPage(banToRun, Convert.ToInt32(banToRun));
loadingBox.Visible = true;
mainTabControl.TabPages.Insert(0, tabPage);
mainTabControl.SelectedTab = mainTabControl.TabPages[0];
runTest(tabPage, banToRun);
loadingBox.Visible = false;
}
}
private void runTest(TabPage t, string ban)
{
if (!cancelTests && !cancelCurrentOnly)
{
var tC = createInitialTabControl();
t.Controls.Add(tC);
int[] theTests = profileInfo.getSetList;
for (int i = 0; i < theTests.Length; i++)
{
if (!cancelTests && !cancelCurrentOnly)
{
var newTab = createTabPage(urlStrings.getName(theTests[i]), theTests[i]);
tC.TabPages.Add(newTab);
var webBrowser = createBrowser(urlStrings.getUrl(theTests[i], ban));
newTab.Controls.Add(webBrowser);
if (theTests[i] != 0 && theTests[i] != 1 && theTests[i] != 6
&& theTests[i] != 11 && theTests[i] != 12)
{
if (!webBrowser.IsDisposed)
{
try
{
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
catch
{
//Do Nothing
}
}
}
IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);
}
}
}
if (cancelCurrentOnly)
{
cancelCurrentOnly = false;
}
banToRun = string.Empty;
testRunning = false;
}
所以基本上我的问题是,我怎样才能优化我所拥有的
A. 减少延迟/冻结 - 注意:已经实现了在每次测试运行后强制进行垃圾收集的方法。B. 可能提高 WebBrowser 控件的性能?- 已经尝试了一些 webbrowser 替代品,如 C# Wrapper 的 WebKit(由于我相信一些基于 ajax 的编码,不适用于所有测试)C。也许实现多线程操作。不知道如何在没有引发跨线程异常的情况下解决这个问题。
感谢你的协助。如果您有任何其他问题,请随时提出。