c#type安全性如何影响垃圾收集?
我正在处理处理大缓冲区(>100MB)的代码,这些缓冲区的操作是在c#type安全性如何影响垃圾收集?,c#,.net,garbage-collection,type-safety,C#,.net,Garbage Collection,Type Safety,我正在处理处理大缓冲区(>100MB)的代码,这些缓冲区的操作是在unsafe块中完成的。我想重构这些代码以避免不安全的代码。在开始之前,我想知道可能的内存性能增益(正/负/中性) 我断言,如果编译器能够验证类型,它可能会生成更好的代码,这也意味着良好的GC性能。这是一个有效的断言吗?你有什么经验?谢谢。这取决于缓冲区的用途 这样大的缓冲区将被放置在大对象堆(LOH)上,因此请务必仔细阅读,以了解其后果 充其量,我也会期待同样的表现 这取决于缓冲区的用途 这样大的缓冲区将被放置在大对象堆(LOH
unsafe
块中完成的。我想重构这些代码以避免不安全的代码。在开始之前,我想知道可能的内存性能增益(正/负/中性)
我断言,如果编译器能够验证类型,它可能会生成更好的代码,这也意味着良好的GC性能。这是一个有效的断言吗?你有什么经验?谢谢。这取决于缓冲区的用途 这样大的缓冲区将被放置在大对象堆(LOH)上,因此请务必仔细阅读,以了解其后果
充其量,我也会期待同样的表现 这取决于缓冲区的用途 这样大的缓冲区将被放置在大对象堆(LOH)上,因此请务必仔细阅读,以了解其后果
充其量,我也会期待同样的表现
不安全
块是一种语言功能,而不是CLR功能。所以它们在运行时并不存在。运行时存在的是固定变量,如果可以避免这些变量,可能会获得性能增益,但这取决于成本/收益之间的权衡。因此,除非代码无正当理由将100 MB缓冲区固定到内存中,否则不要担心性能影响。不安全
块是一种语言功能,而不是CLR功能。所以它们在运行时并不存在。运行时存在的是固定变量,如果可以避免这些变量,可能会获得性能增益,但这取决于成本/收益之间的权衡。因此,不要担心性能影响,除非代码无正当理由地将100 MB缓冲区固定到内存中。我预计会产生负面影响。除了“安全”标志消失之外,我看不到删除不安全代码的任何好处:
我期待负面的影响。除了“安全”标志消失之外,我看不到删除不安全代码的任何好处:
比类型安全性更相关的是
unsafe
块中的钉住活动。是的,在各种操作之前,缓冲区被钉住在“固定”块中,我相信这是放开类型安全性以便使用指针进行操作的结果。钉住没有任何区别。这些大型阵列是在LOH中分配的,它们是不可移动的。@Hans Passant:这是一个很好的观点;我被纠正了。比类型安全性更相关的是不安全的块中的钉住活动。是的,在各种操作之前,缓冲区被钉住在“固定”块中,我相信这是放开类型安全性以便使用指针进行操作的结果。钉住没有任何区别。这些大型阵列是在LOH中分配的,它们是不可移动的。@Hans Passant:这是一个很好的观点;我被纠正了。