.Net Com Interop 创建实例速度慢
我有一个 .net 4 应用程序,它使用 Com Dll 发送 SMS 消息。我使用 TlbImp 创建互操作程序集,这就是应用程序中引用的内容。
当我尝试创建此类的实例时,需要很长时间(2-5 秒)。
我在 VS 2010 中运行了性能分析,到目前为止花费时间最长的调用是 System.Activator.CreateInstance()。
我正在寻找有关如何使用 Com Interop 进行调试或遇到的问题的提示。
I have a .net 4 application that uses a Com Dll to send SMS messages. I used TlbImp to create the interop assembly and that is what is referenced in the application.
When I try to create an instance of this class, it takes a really long time (2-5 seconds).
I ran performance profile in VS 2010 and the call that takes the longest by far is System.Activator.CreateInstance().
I am looking for tips on how to debug or gotchas with using Com Interop.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在其上创建对象的线程是什么 COM Apartment 类型?
如果它是您的主应用程序线程,并且您没有使用 STAThreadAttribute 您将在 MTA 中运行。如果您使用该属性,您的线程将处于 STA 中。对于其他线程,您可以使用 Thread 设置单元类型。在启动线程之前设置ApartmentState。
如果您的 COM 对象注册到与您正在使用的不同的公寓模型中,您将产生启动新线程/公寓、在另一个公寓中创建对象以及通过代理/存根进行的所有通信的开销而不是直接调用 COM 对象。
这可能会导致一些性能问题。
What COM Apartment type is the thread you are creating the object on?
If it is you main application thread and you do not mark you Main entry point with the STAThreadAttribute you will be running in an MTA. If you use the attribute your thread will be in an STA. For other threads, you can set the apartment type using Thread.SetApartmentState before starting the thread.
If your COM object is registered with a different apartment model than you are using, you'll incur the overhead of a new thread/apartment being spun up, the object being created in that other apartment, and all communication occurring via proxy/stubs rather than direct invocations on the COM object.
This could be causing some performance issues.