c# - 具有一定堆栈大小的进程?

标签 c# .net process stack

C# 中有没有办法启动具有特定堆栈大小的进程?

最佳答案

投反对票的狂欢,我犹豫是否要发帖。但 Henrik 是对的,第一个线程是 Windows 在启动 EXE 时启动的。它完成了一大堆工作,加载 CLR 是它的职责之一。它会在您的程序中运行 Main() 方法。

.NET 框架提供了很少的选项来配置该线程。只有 Main() 方法上的 [MTAThread] 和 [STAThread] 属性有所不同,它们会影响 CLR 调用 CoInitializeEx() API 函数的方式。

线程的堆栈大小实际上是可配置的。它是 PE32 文件格式中的字段之一,PE32 文件格式是 Windows 中用于可执行镜像的格式。通常,C# 或 VB.NET 编译器负责生成该文件,但都没有设置初始线程堆栈大小的选项。有点疏忽。它们使用默认值,32 位 EXE 为 1 MB,64 位 EXE 为 4 MB(平台目标 = x64)。

可以更改该值,您可以运行 Editbin.exe 实用程序来修改 EXE 文件,使用/STACK 命令行选项。您需要在构建后步骤中执行此操作。请注意,这与强名称或使用证书签名不兼容,因为它会修改 EXE 文件。

顺便说一句,这并不是一个真正的问题,如果您需要一个具有大量堆栈空间的线程,那么您可以在 Main() 方法中自己创建一个线程。

关于c# - 具有一定堆栈大小的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2900918/

相关文章:

c# - MVC5 : UserManager. 添加到角色 () : "Error Adding User to Role: UserId not found"?

c# - WPF MVVM 应用程序中常量(标签文本等)应该放在何处

.net - 是否有一种经过验证的方法可以在 .NET 中非常快速地访问非常大(> 1 GB)二进制文件的特定区域

c# - 允许系统帐户启动模拟进程

c# - 在 LINQ 查询中包含百分比计算

c# - 响应.Cookies : How to append with expiration?

c# - 在 C# 中优化多个调度通知算法?

c# - IEnumerable<TSource> Concat<TSource> 是否保留元素的顺序?

linux - 如何从父进程获取子进程

python - 用调用子进程替换当前进程?