简单的SqlCommand - 非常高的CPU

时间:2016-04-27 23:11:52

标签: c# sql-server

我做了一个简单的控制台应用程序。 (以下代码)。

当我在计算机上运行程序时,它运行正常。但是,当我在我们的虚拟机服务器(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%)....

程序启动时...... enter image description here

经过3分11秒和一些ms ......

enter image description here

0 个答案:

没有答案