通过避免 Activator.CreateInstance 提高 Excel 启动性能

发布于 2024-12-20 14:02:43 字数 923 浏览 2 评论 0原文

在我们的.Net 应用程序中,Excel 正在运行。有什么方法可以避免在启动 Excel 实例时调用 Activator.CreateInstance() 吗? new Excel.Application() 导致它被调用。

这是打开 Excel 的代码:

        public void OpenExcel(string filePath, Action beforeCloseAction, Action beforeSaveAction = null)
    {
        _excelApp = new Application
        {
            DisplayAlerts = false,
            WindowState = XlWindowState.xlMaximized,
            Visible = false,
        };

        _onBeforeSaveCall = beforeSaveAction;
        _excelApp.WorkbookBeforeSave += WorkbookBeforeSave;

        _onBeforeCloseCall = beforeCloseAction;
        _excelApp.WorkbookBeforeClose += WorkbookBeforeClose;

        _excelWorkbooks = _excelApp.Workbooks;

        SetExcelWorkbook(_excelWorkbooks.Open(filePath));

        _excelWorkbook.Saved = true;
    }

dotTrace 分析输出:

In our .Net application, Excel is getting run. Is there any way to avoid calling Activator.CreateInstance() when starting an Excel instance? new Excel.Application() causes it to be called.

This is the code which opens excel :

        public void OpenExcel(string filePath, Action beforeCloseAction, Action beforeSaveAction = null)
    {
        _excelApp = new Application
        {
            DisplayAlerts = false,
            WindowState = XlWindowState.xlMaximized,
            Visible = false,
        };

        _onBeforeSaveCall = beforeSaveAction;
        _excelApp.WorkbookBeforeSave += WorkbookBeforeSave;

        _onBeforeCloseCall = beforeCloseAction;
        _excelApp.WorkbookBeforeClose += WorkbookBeforeClose;

        _excelWorkbooks = _excelApp.Workbooks;

        SetExcelWorkbook(_excelWorkbooks.Open(filePath));

        _excelWorkbook.Saved = true;
    }

dotTrace profiling output:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云巢 2024-12-27 14:02:43

您是否运行过分析器以便了解性能问题所在?如果对 Activator.CreateInstance 的调用是应用程序中的性能瓶颈,我会感到非常惊讶。据推测,您不会每秒创建许多 Excel 实例,而是在启动时创建一个实例。这是否由 Activator.CreateInstance 完成应该没有什么区别。

Have you run a profiler so that you know where the performance issues lie? I'd be very surprised if the call to Activator.CreateInstance was a performance bottleneck in your application. Presumably you will not be creating many Excel instances per second, but rather one instance on start up. Whether this is done by Activator.CreateInstance or not should make little difference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文