我需要在.NET中显式调整堆栈大小吗?

白盒

我有一个大的工作arraystruct在.NET类型,这远远比分配堆栈(每个线程)的标准1MB的。我现在只关心主线程。

  1. 我读了一篇旧文章(可能已过时),其中提到了明确调整堆栈大小:http : //content.atalasoft.com/h/i/58213648-increasing-the-size-of-your-stack-net-memory-management -第3部分

  2. 我注意到,stackoverflow exceptions在32位模式下,但不是在64位模式下(我感兴趣的主要模式),我的程序经常崩溃

暂定假说

  1. 在32位模式下,您需要显式增加堆栈的大小。

  2. .NET框架在64位模式下为您隐式调整堆栈的大小(即使此行为与64位模式不一致)。

汉斯·帕桑特

C#和VB.NET编译器无法指定主线程的初始堆栈大小。C ++ / CLI编译器可以。否则,在生成后事件中使用Editbin.exe是一个简单的解决方法。

未公开此选项,因为对于托管代码,默认堆栈大小非常大与非托管语言(如C和C ++)不同,没有简单的方法来使用声明消耗大量堆栈。数组和字符串是引用类型,因此是在GC堆而不是堆栈上分配的。

唯一有效的方法是使用unsafestackalloc关键字,这是您永远不会偶然使用的关键字。还是通过递归,要么是偶然的(到目前为止是最常见的情况),要么是使用比O(logN)更差的递归算法。这样的问题严重倾向于bug,Editbin.exe只是一个创可贴,因为当数据集足够大时,您仍然会感到烦恼。

仅需要注意的其他细节是,如果专门针对x64 ,则初始堆栈大小将为4MB而不是1MB 通常也有一个错误,您总是喜欢AnyCPU。


因此,否则的盲目建议是开始寻找该递归代码。它不应离生成SOE的语句很远,至少在堆栈跟踪中可见。注意O(N)尾部递归,您不能指望它得到优化,绝对不是32位代码。考虑替换它或对其进行分区,或者对数据集大小添加检查,并抢先引发异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我需要在Rails迁移中显式创建一个ID吗?

来自分类Dev

我需要在C ++中取模

来自分类Dev

我需要在我的android应用中实现Notification Reminder

来自分类Dev

我需要在我的代码中显示表头

来自分类Dev

我需要在子类中声明serialUID吗?

来自分类Dev

我需要在每个项目目录中安装Express吗?

来自分类Dev

我需要在GTK中释放弹出菜单吗?

来自分类Dev

我需要在回调中释放IntPtr吗?

来自分类Dev

我需要在Laravel中验证数据用于查询吗?

来自分类Dev

Android Flutter:我需要在主体中设置“ SingleChildScrollView”吗?

来自分类Dev

我需要在react函数中清除clearTimeout吗?

来自分类Dev

我需要在PowerShell中调用“删除作业”吗?

来自分类Dev

我需要在Android Studio的服务中运行MediaPlayer吗?

来自分类Dev

我需要在Java目录中安装Glassfish吗?

来自分类Dev

我需要在PHP对象中声明每个属性吗?

来自分类Dev

我需要在每个项目目录中安装Express吗?

来自分类Dev

我需要在Laravel中验证数据用于查询吗?

来自分类Dev

我需要在Talend中关闭连接吗?

来自分类Dev

PostgreSQL:我需要在 CTE 中返回任何内容吗?

来自分类Dev

我需要在java中拆分字符串吗?

来自分类Dev

我是否需要在托管C ++中显式释放内存?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么我需要在docker-compose.yml中显式声明env_file?

来自分类Dev

我是否需要在构造函数中显式初始化std :: unique_ptr?

来自分类Dev

我是否需要在 TidHttp 10.5498 版中显式折叠标题行?

来自分类Dev

我需要在包含的php文件中回显html吗

来自分类Dev

laravel我需要在unique()列上使用index()吗?

来自分类Dev

我需要在Scala中使用@tailrec吗?

来自分类Dev

我需要在Redis脚本中使用MULTI / EXEC吗

Related 相关文章

  1. 1

    我需要在Rails迁移中显式创建一个ID吗?

  2. 2

    我需要在C ++中取模

  3. 3

    我需要在我的android应用中实现Notification Reminder

  4. 4

    我需要在我的代码中显示表头

  5. 5

    我需要在子类中声明serialUID吗?

  6. 6

    我需要在每个项目目录中安装Express吗?

  7. 7

    我需要在GTK中释放弹出菜单吗?

  8. 8

    我需要在回调中释放IntPtr吗?

  9. 9

    我需要在Laravel中验证数据用于查询吗?

  10. 10

    Android Flutter:我需要在主体中设置“ SingleChildScrollView”吗?

  11. 11

    我需要在react函数中清除clearTimeout吗?

  12. 12

    我需要在PowerShell中调用“删除作业”吗?

  13. 13

    我需要在Android Studio的服务中运行MediaPlayer吗?

  14. 14

    我需要在Java目录中安装Glassfish吗?

  15. 15

    我需要在PHP对象中声明每个属性吗?

  16. 16

    我需要在每个项目目录中安装Express吗?

  17. 17

    我需要在Laravel中验证数据用于查询吗?

  18. 18

    我需要在Talend中关闭连接吗?

  19. 19

    PostgreSQL:我需要在 CTE 中返回任何内容吗?

  20. 20

    我需要在java中拆分字符串吗?

  21. 21

    我是否需要在托管C ++中显式释放内存?

  22. 22

    为什么我们需要在MSIL中显式调用父构造函数?

  23. 23

    为什么我需要在docker-compose.yml中显式声明env_file?

  24. 24

    我是否需要在构造函数中显式初始化std :: unique_ptr?

  25. 25

    我是否需要在 TidHttp 10.5498 版中显式折叠标题行?

  26. 26

    我需要在包含的php文件中回显html吗

  27. 27

    laravel我需要在unique()列上使用index()吗?

  28. 28

    我需要在Scala中使用@tailrec吗?

  29. 29

    我需要在Redis脚本中使用MULTI / EXEC吗

热门标签

归档