C#中是否有办法启动具有特定堆栈大小的进程?
答案 0 :(得分:3)
一个低调投票的节日,我不愿发帖。但是Henrik是对的,第一个线程是在Windows启动EXE时启动的。它完成了大量工作,加载CLR是其职责之一。它在你的程序中运行Main()方法。
.NET框架提供了很少的配置该线程的选项。只有Main()方法上的[MTAThread]和[STAThread]属性才有所不同,它们会影响CLR调用CoInitializeEx()API函数的方式。
线程的堆栈大小实际上是可配置的。它是PE32文件格式中的一个字段,即Windows中用于可执行映像的格式。通常C#或VB.NET编译器负责生成该文件,也没有设置初始线程堆栈大小的选项。有点疏忽。它们使用默认值,一个兆字节用于32位EXE,四个兆字节用于64位EXE(平台目标= x64)。
可以更改该值,可以运行Editbin.exe实用程序来修改EXE文件,使用/ STACK命令行选项。您将希望在后构建步骤中执行此操作。请注意,这与强名称不兼容或使用证书签名,因为它会修改EXE文件。
这不是一个真正的问题,如果你需要一个拥有大量堆栈空间的线程,那么你自己在Main()方法中创建一个。
答案 1 :(得分:0)
在这个帖子中,他们显示了一个PoC,您可以使用Editbin.exe来修改进入main的线程的默认堆栈大小: http://bytes.com/topic/c-sharp/answers/229335-stack-size
如果你产生新线程,那么就有一个API: http://msdn.microsoft.com/en-us/library/ms149581.aspx