私は、バックグラウンドでいくつかの重い作業を行うWPFアプリを構築しています。問題は、単体テストでタスクを実行すると、通常、実行に約6〜7秒かかることです。しかし、WPFアプリでTPLを使用して実行すると、実行に12〜30秒かかります。このことをスピードアップする方法はありますか?実際の作業を行うために、LogParserのCOMAPIを呼び出しています。
更新:LogParserAPIを呼び出すための私のコードは次のようになります
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を押して実行すると、私をはるかに超えています。どうして??