设置CLR线程池的默认大小

原创 2004年06月26日 23:53:00

在Codeproject看到了一片好文章介绍如何重新设置.NET的CLR线程池大小。

首先明确负责设置线程池默认大小的COM对象的GUID是:

 // Declare ThreadManager as a COM coclass:
 [
  // CLSID_CorRuntimeHost from MSCOREE.DLL
  Guid("CB2F6723-AB3A-11D2-9C40-00C04FA30A3E"),ComImport
 ]
 class ThreadManager   // Cannot have a base class or
  // interface list here.
 {
  // Cannot have any members here
  // NOTE that the C# compiler will add a default constructor
  // for you (no parameters).
 }

其次声明组件的Interface是:

 [
 // IID_IcorThreadPool
 Guid("84680D3A-B2C1-46e8-ACC2-DBC0A359159A"),
 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
 ]
 public interface ICorThreadpool   // Cannot list any base interfaces here
 {
  // Note that IUnknown Interface members are NOT listed here:

  void RegisterWaitForSingleObject(); // Not Implemeted.
  void UnregisterWait(); //  Not Implemeted.
  void QueueUserWorkItem(); //  Not Implemeted.
  void CreateTimer(); //  Not Implemeted.
  void ChangeTimer(); //  Not Implemeted.
  void DeleteTimer(); //  Not Implemeted.
  void BindIoCompletionCallback(); //  Not Implemeted.
  void CallOrQueueUserWorkItem();  // Not Implemeted.
  void SetMaxThreads( uint MaxWorkerThreads, uint MaxIOCompletionThreads );
  void GetMaxThreads(  out uint MaxWorkerThreads, out uint MaxIOCompletionThreads );
  void GetAvailableThreads( out uint AvailableWorkerThreads, out uint AvailableIOCompletionThreads );
 }

Ok,然后就可以这样设置了:

ThreadManager threadManager = new ThreadManager();

// QueryInterface for the ICorThreadPool interface:
MSCoreeTypeLib.ICorThreadpool  ct = (MSCoreeTypeLib.ICorThreadpool)threadManager;

int maxWorkerThreads = 35;
int maxIOThreads = 35;
ct.SetMaxThreads(maxWorkerThreads, maxIOThreads);

 

CLR线程池的工作者线程

关于CLR线程池 使用ThreadStart与ParameterizedThreadStart建立新线程非常简单,但通过此方法建立的线程难于管理,若建立过多的线程反而会影响系统的性能。 有见及...
  • wyxhd2008
  • wyxhd2008
  • 2012年09月05日 15:52
  • 603

如何启用clr enabled配置选项

 错误信息如下: 禁止在.Net Framewrok中执行用户代码.启用"clr enabled"配置选项解决方案:--在Sql Server中执行这段代码可以开启CLRexec sp_conf...
  • killlkilll
  • killlkilll
  • 2007年04月24日 08:55
  • 11544

C多线程(三) -- CLR线程池的工作者线程

1. 关于CLR线程池使用ThreadStart与ParameterizedThreadStart建立新线程非常简单,但通过此方法建立的线程难于管理,若建立过多的线程反而会影响系统的性能所以,.NET...
  • u011033906
  • u011033906
  • 2017年03月16日 10:31
  • 450

vs2008中设置VC编译器的/clr选项

我们知道WPF API是被管制的代码,而大多数Win32/MFC程序是非管制的C++代码。 为了使管制和非管制代码无缝地结合,可以通过使用VC编译器的/clr选项。 方法如下: 右键点击项目-->Pr...
  • whq_1030
  • whq_1030
  • 2011年03月07日 15:37
  • 2427

CLR线程池

1.当使用委托类型(BeginInvoke调用)进行异步方法调用的时候,CLR并不会创建新的线程。委托的BeginInvoke()方法创建了由运行时维护的工作者线程。 2.System.Threa...
  • shabihundan
  • shabihundan
  • 2016年03月17日 22:04
  • 98

CLR 的线程池

原文地址:http://blog.csdn.net/laojievip/archive/2005/02/22/297391.aspxMicrosoft 一直试图提高其平台与应用程序的性能。许多年前,M...
  • qilinfei
  • qilinfei
  • 2008年01月02日 08:46
  • 201

CLR 的线程池

CLR 的线程池  Jeffrey Richter Microsoft 一直试图提高其平台与应用程序的性能。许多年前,Microsoft 研究了应用程序开发人员是如何使用线程的,以便看看能做些什么来提...
  • flying2
  • flying2
  • 2008年10月07日 11:15
  • 316

java&android线程池-Executor框架之ThreadPoolExcutor&ScheduledThreadPoolExecutor浅析(多线程编程之三)

无论是在java还是在android中其实使用到的线程池都基本是一样的,因此本篇我们将来认识一下线程池Executor框架(相关知识点结合了并发编程艺术书以及Android开发艺术探索而总结),下面是...
  • javazejian
  • javazejian
  • 2016年03月14日 22:45
  • 9240

Ubuntu 10.04设置终端窗口的默认大小

Ubuntu 10.04下终端窗口的默认大小为80*24,但有时我们需要更大的窗口。可以通过修改配置文件来实现上述目的,在终端中执行: sudo gedit /usr/share/vte/termc...
  • chenzhengfeng
  • chenzhengfeng
  • 2017年08月22日 18:18
  • 122

设置线程池的大小

线程池的理想大小取决于被提交任务的类型以及所部属系统的特性。在系统中一般不固定线程池的大小,而是通过某种配置机制来提供。或则根据处理器的数量来决定:我们可以通过如下代码来获取处理器的数量://获取处理...
  • u010853261
  • u010853261
  • 2017年01月11日 16:56
  • 747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设置CLR线程池的默认大小
举报原因:
原因补充:

(最多只允许输入30个字)