【问题标题】:disable momentarily GC for critical section code暂时禁用关键部分代码的 GC
【发布时间】:2015-08-14 09:23:11
【问题描述】:

我正在尝试使用 c# 语言编写一个实时应用程序(具有物理交互)。 Globaly 它工作正常,但有时我的关键部分必须迟到,这不是很好。我会建议我的 GC 第一次参与。

我使用实际的默认参数 c#(GC 处于活动状态,prog 未预先设置,我不使用 marshall 等)。

我可以暂时禁用我的关键代码部分的 GC 活动(我知道它在异步并行线程中工作)或者类似的东西吗?

或者我应该对我的 GC 说不要管理我的关键部分?

我愿意接受任何请求和评论谢谢!

edit : 我的 prog 总是实时的。

【问题讨论】:

    标签: c# garbage-collection real-time critical-section


    【解决方案1】:

    这个问题可能会对你有所帮助。 Prevent .NET Garbage collection for short period of time 另外,是什么让你认为 GC 对迟到负责? 我还想说,您可能想要使用结构,因为它们存储在堆栈中,因此它们不受 GC 影响并且通常更快。

    【讨论】:

    • 我没有看到这篇文章,但我看到了MSDN low latency mode。我知道 GC 更快,但被称为他停止所有线程,你可以看到 here。可能我的问题不同,GC 不负责。
    • 好吧,我已经为您提供了有关如何暂停 GC 的答案。如果您希望社区找到问题的根源,您应该发布代码示例
    • @FlorianJ 请注意,在 .NET 4.6 中,他们为此添加了两个新方法:GC.TryStartNoGCRegionGC.EndNoGCRegion
    • 感谢您的回答,我现在无法发布代码示例,但我可以更精确地了解如何执行此操作吗?临界区应该强制进入 try-finally 吗? GC 正确设置为低延迟模式需要多长时间?我没有在我的应用上使用任何结构
    • 哦,@xanatos,不知道这个,我会寻找 .NET 4.6 的更多信息,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2016-02-16
    • 2013-03-28
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多