是什么导致在 .NET 4.5 下完美无缺的代码在 3.5 下变得 CPU 贪婪?
What could cause code that's perfectly fine under .NET 4.5 to be CPU greedy under 3.5?
我正在使用 netmq 的最新预发布版,我发现以下程序在 .NET 4.5 下几乎不会消耗 CPU,但在版本下固定为 13%框架的3.5.
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem((o) =>
{
using (NetMQContext context = NetMQContext.Create())
{
using (NetMQSocket requester = context.CreateRequestSocket()) // creating this socket seems to fix cpu consumptio at 13%.. why?
{
Console.WriteLine("LOADED");
Console.ReadKey();
}
Console.WriteLine("DISPOSED SOCKET");
Console.ReadKey();
}
Console.WriteLine("DISPOSED CONTEXT");
Console.ReadKey();
});
while (true) Thread.Sleep(1000);
}
}
有人知道这种意外行为的潜在原因吗?
编辑:
已确认这发生在 .NET 3.5 中并且不会发生在 4 或 4.5
所以问题似乎是在 .Net 3.5 中存在 Socket.Select 的错误。
Socket.Select() with -1 timeout not blocking at all
我正在使用 netmq 的最新预发布版,我发现以下程序在 .NET 4.5 下几乎不会消耗 CPU,但在版本下固定为 13%框架的3.5.
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem((o) =>
{
using (NetMQContext context = NetMQContext.Create())
{
using (NetMQSocket requester = context.CreateRequestSocket()) // creating this socket seems to fix cpu consumptio at 13%.. why?
{
Console.WriteLine("LOADED");
Console.ReadKey();
}
Console.WriteLine("DISPOSED SOCKET");
Console.ReadKey();
}
Console.WriteLine("DISPOSED CONTEXT");
Console.ReadKey();
});
while (true) Thread.Sleep(1000);
}
}
有人知道这种意外行为的潜在原因吗?
编辑: 已确认这发生在 .NET 3.5 中并且不会发生在 4 或 4.5
所以问题似乎是在 .Net 3.5 中存在 Socket.Select 的错误。
Socket.Select() with -1 timeout not blocking at all