C++ 访问C++;来自Webservice的COM dll

C++ 访问C++;来自Webservice的COM dll,c++,web-services,com,critical-section,C++,Web Services,Com,Critical Section,我正在使用来自web服务的COM dll。 COM dll被添加为引用。我在Global.asax中将对象声明为静态。 我正在应用程序启动中创建COM对象 我必须在每个请求中调用COM dll接口函数。 我在这里得到的异常是内存损坏。我可以看到当同时请求出现时发生的日志。 请让我知道最好的方法是什么。如何使其线程安全。?尝试在每个请求中创建一个新实例,而不使用对象的应用程序范围 如果您在应用程序范围内访问它(例如通过应用程序启动),您需要确保它对于多线程是安全的。我不知道C++如何处理线程,但

我正在使用来自web服务的COM dll。 COM dll被添加为引用。我在Global.asax中将对象声明为静态。 我正在应用程序启动中创建COM对象

我必须在每个请求中调用COM dll接口函数。 我在这里得到的异常是内存损坏。我可以看到当同时请求出现时发生的日志。
请让我知道最好的方法是什么。如何使其线程安全。?

尝试在每个请求中创建一个新实例,而不使用对象的应用程序范围


如果您在应用程序范围内访问它(例如通过应用程序启动),您需要确保它对于多线程是安全的。我不知道C++如何处理线程,但是您可以在ASP.NET级别管理多线程。 例如,要管理简单的应用程序级计数器,代码如下:

Application.Lock();
Application["SomeGlobalCounter"] =
   (int)Application["SomeGlobalCounter"] + 1;
Application.UnLock();

有关详细信息,您可能希望在上查看MSDN页。

如果COM对象是单元线程,COM将提供同步以强制每个线程执行一个方法

但是,COM通常会抱怨多个线程试图使用跨线程共享的同一指针访问对象的实例。让一个静态变量持有指向对象的指针可能是个坏主意


一旦通过创建实例将COM对象共享库加载到某个位置(进程内或进程外),每个线程创建额外实例的速度应该相当快。当然,这取决于对象构造过程中执行的操作类型。

但在这种情况下,加载和卸载会影响性能。此服务处理许多请求。是否有其他方法?这可能是个问题,但使dll线程安全可能会对性能造成更大的影响。首先构建它,然后测量它以发现性能问题。组件是线程安全的吗?公寓?你能通过调试器进入COM吗?这个组件真的是线程安全的吗?尝试将其更改为公寓,如果崩溃消失,则很可能是组件内部的并发性问题。更改注册表,可能需要重新生成引用。不知道.NET是如何运行的。