.NET垃圾收集器';s停止世界效果停止或延迟非托管线程和计时器回调的执行?
我有一个应用程序需要以非常精确的间隔执行代码。为此,我还需要通过.NET垃圾收集器';s停止世界效果停止或延迟非托管线程和计时器回调的执行?,.net,garbage-collection,interop,scheduling,.net,Garbage Collection,Interop,Scheduling,我有一个应用程序需要以非常精确的间隔执行代码。为此,我还需要通过timeBeginPeriod将Windows的调度程序分辨率提高到1ms 这样,我有一个本地C++ DLL,它通过从1*ms(所有本机代码)的间隔从代码< TimeQuealeTeaEng/中得到的回调来处理所有关键时间的事情。 应用程序本身是一个.NET应用程序(C#,所以是纯CLR)。本机dll使用缓冲,因此只要C#代码每隔50毫秒左右获得一段执行时间,它本身就不需要对时间要求很高 当垃圾收集器触发时,这是否也会停止或延迟程序
timeBeginPeriod
将Windows的调度程序分辨率提高到1ms
这样,我有一个本地C++ DLL,它通过从1*ms(所有本机代码)的间隔从代码< TimeQuealeTeaEng/<代码>中得到的回调来处理所有关键时间的事情。 应用程序本身是一个.NET应用程序(C#,所以是纯CLR)。本机dll使用缓冲,因此只要C#代码每隔50毫秒左右获得一段执行时间,它本身就不需要对时间要求很高
当垃圾收集器触发时,这是否也会停止或延迟程序中任何计时器回调的执行?(换句话说,.NET程序的不确定性是否会蔓延到它使用的本机代码片段?)我还没有找到这个精确问题的答案。链接到MSDN文档将是最令人放心的我使用的是.NET 4.0,直觉告诉我不是-CLR只会影响托管线程
(同样值得注意的是,有几种行为方式不同)您使用的是哪个版本的.NET?GC在4.5中发生了变化,它可能会帮助您解决问题()。@dialer您有什么经验?在托管环境中运行非托管线程时是否存在性能问题?谢谢:)我想这是正确的(无论如何我希望如此),因为AndyBrown评论中的文档说“运行本机代码的线程不受影响”。但是,我的计时器回调在线程池线程上运行,并且在任何两个回调之间还没有选择该线程。我不确定在GC操作期间是否可以恢复所有挂起的线程池线程(考虑到还有托管线程池线程?)