我正在构建一个 WPF 应用程序,它将在后台完成一些繁重的工作。问题是当我在单元测试中运行任务时,通常需要大约 6~7 秒才能运行。但是当我在 WPF 应用程序中使用 TPL 运行它时,它需要 12 秒到 30 秒才能运行。有没有办法加快这件事。我正在调用 LogParser 的 COM api 来完成真正的工作。
更新:我调用 Log Parser API 的代码如下所示
var thread = new Thread(() =>
{
var logQuery = new LogQueryClassClass();
var inputFormat = new COMEventLogInputContextClassClass
{
direction = "FW",
fullText = true,
resolveSIDs = false,
formatMessage = true,
formatMsg = true,
msgErrorMode = "MSG",
fullEventCode = false,
stringsSep = "|",
iCheckpoint = string.Empty,
binaryFormat = "HEX"
};
try
{
Debug.AutoFlush = true;
var watch = Stopwatch.StartNew();
var recordset = logQuery.Execute(query, inputFormat);
watch.Stop();
watch = Stopwatch.StartNew();
while (!recordset.atEnd())
{
var record = recordset.getRecord();
recordProcessor(record);
recordset.moveNext();
}
recordset.close();
watch.Stop();
}
catch
{
}
finally
{
if (logQuery != null)
{
Marshal.ReleaseComObject(logQuery);
GC.SuppressFinalize(logQuery);
logQuery = null;
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
现在的事情是有了这个变化,我可以看到调试模式大约有 3 - 4 秒的改进,但是当我按 Ctrl + F5运行它时却没有,这超出了我的想象。怎么来的??