我做了一个简单的控制台应用程序。 (以下代码)。
当我在计算机上运行程序时,它运行正常。但是,当我在我们的虚拟机服务器(Windows Server 2008)上运行它时,经过一分钟后,该过程将占用所有CPU。在我关闭应用程序之前它会达到100%的使用率。我能想到的唯一区别是我的计算机上的数据库是本地的,在服务器上,使用的数据库是在另一台机器上。
知道什么可能导致CPU疯狂......?
static void Usings()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]))
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT GETDATE()", conn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
Console.WriteLine(dr[0].ToString());
dr.Dispose();
cmd.Dispose();
}
Console.ReadKey();
}
更新
我修改了代码只打开一个SqlConnection,我仍然得到了这个行为。
我还添加了一些代码以获得有关垃圾收集器方法的通知。在收到通知之前,CPU会进入最前几毫秒。所以我怀疑垃圾收集器对此负责。任何线索?建议我可以深入挖掘?
新代码:
static void Main(string[] args)
{
#region Register for Garbage Collector Notifications
GC.RegisterForFullGCNotification(10, 10);
// Start a thread using WaitForFullGCProc.
Thread thWaitForFullGC = new Thread(new ThreadStart(WaitForFullGCProc));
thWaitForFullGC.Start();
#endregion
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT GETDATE()", conn))
{ }
}
_sw.Start();
Log("Waits for key press...");
Console.Read();
}
PS:如果我不打开SQL连接,CPU保持稳定(0%)....
经过3分11秒和一些ms ......