我在工作线程中遇到了Excel Interop非常缓慢的表现。
以下是我在VSTO项目中的代码,只需读取指定单元格(例如'Sheet1! A1')的值:
private object test(string sheetRange = "Sheet1!A1")
{
var targetRange = sheetRange.Split('!');
if (targetRange.Length != 2) { return null; }
var sheetname = targetRange[0];
var address = targetRange[1];
var workbook = Application.ActiveWorkbook;
var sheet = (Excel.Worksheet)workbook.Worksheets[sheetname];
var cell = sheet.Range[address];
return cell.Value;
}
当我在UI线程中运行这段代码时,它运行得非常快。
但是一旦它在工作线程中运行,性能会变得非常糟糕(大约慢了x50-x100倍)。
Thread thread = new Thread(() =>
{
test();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join(int.MaxValue);
Marshal.ReleaseComObject没有被执行,因为这是测试代码。
我的代码有什么问题吗? 还是有什么方法可以避免工作线程中的性能问题?
谢谢