Как мне рассчитать время выполнения SQL-запроса в C #? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь просто узнать время выполнения моего запроса к SQL Server, используя c #.Я думал, что таймер сработает;Однако я новичок в C # и были проблемы с его выяснением.Я просмотрел несколько вопросов на этом сайте и на других сайтах, пытаясь выяснить, как рассчитать время выполнения моего запроса.

Вот мой код:

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        Console.WriteLine("Executing query...");
        string customerID = "ID_HERE";
        using (SqlConnection connection = new SqlConnection("CONNECTION_STRING"))
        {
            connection.Open();

            using (SqlCommand command = new SqlCommand(
                "SELECT col0, col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM Table_name WHERE col1 LIKE @ID", connection))
            {

                command.Parameters.Add(new SqlParameter("ID", customerID));

                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    int col0 = reader.GetInt32(0);
                    int col1 = reader.GetInt32(1);
                    string col2 = reader.GetString(2);
                    string col3 = reader.GetString(3);
                    int col4 = reader.GetInt32(4);
                    int col5 = reader.GetInt32(5);
                    short col6 = reader.GetInt16(6);
                    string col7 = reader.GetString(7);
                    string col8 = reader.GetString(8);
                    int col9 = reader.GetInt32(9);
                    Console.WriteLine("col0 = {0}, col1 = {1}, col2 = {2}, col3 = {3}, col4 = {4}, col5 = {5}, col6 = {6}, col7 = {7}, col8 = {8}, col9 = {9}",
                        col0,
                        col1,
                        col2,
                        col3,
                        col4,
                        col5,
                        col6,
                        col7,
                        col8,
                        col9
                        );
                }
            }
        }
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }

}

Я не уверен, как добавить к этому таймер, который только раз выполняет запрос, или даже куда его поставить.Я пытался найти другие посты об этом, но ни один из тех, которые я нашел, не похож на этот;Я также мог бы быть очень плох в моих поисках.Буду признателен за любую помощь, и если вам нужна дополнительная информация, дайте мне знать.Я переименовал несколько вещей для безопасности, но так обстоит дело с кодом.На заметку: я использую это для целей тестирования, а не для производства, так что на самом деле это увидят лишь несколько человек, но это необходимо.

Ответы [ 5 ]

0 голосов
/ 18 сентября 2018
DECLARE @Time1 DATETIME

DECLARE @Time2 DATETIME

SET     @Time1 = GETDATE()

-- Insert query here

SET     @Time2 = GETDATE()

SELECT  DATE DIFF(MILLISECOND,@Time1,@Time2) AS Elapsed_MS

этот код позволяет вам показать точное время выполнения определенного сегмента кода в вашем SQL-запросе.Поместите код, для которого вы хотите получить время выполнения, в центр приведенного ниже сценария.Точное время будет показано в результатах.

0 голосов
/ 18 сентября 2018

SQL-запрос начинает выполняться с SqlCommand.ExecuteReader() и завершается после того, как SqlDataReader.Read() возвращает false.Обратите внимание, что если SQL Server подключен к медленной сети или имеется большое количество результатов, он не будет точно измерять время ожидания на SQL Server.

Итак

using System;
using System.Data.SqlClient;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        Console.WriteLine("Executing query...");
        string customerID = "ID_HERE";
        using (SqlConnection connection = new SqlConnection("CONNECTION_STRING"))
        {
            connection.Open();

            using (SqlCommand command = new SqlCommand(
                "SELECT col0, col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM Table_name WHERE col1 LIKE @ID", connection))
            {

                command.Parameters.Add(new SqlParameter("ID", customerID));
                var sw = new Stopwatch();

                sw.Start();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    int col0 = reader.GetInt32(0);
                    int col1 = reader.GetInt32(1);
                    string col2 = reader.GetString(2);
                    string col3 = reader.GetString(3);
                    int col4 = reader.GetInt32(4);
                    int col5 = reader.GetInt32(5);
                    short col6 = reader.GetInt16(6);
                    string col7 = reader.GetString(7);
                    string col8 = reader.GetString(8);
                    int col9 = reader.GetInt32(9);
                    Console.WriteLine("col0 = {0}, col1 = {1}, col2 = {2}, col3 = {3}, col4 = {4}, col5 = {5}, col6 = {6}, col7 = {7}, col8 = {8}, col9 = {9}",
                        col0,
                        col1,
                        col2,
                        col3,
                        col4,
                        col5,
                        col6,
                        col7,
                        col8,
                        col9
                        );
                }
                var elapsed = sw.Elapsed;

                Console.WriteLine($"Query Executed and Results Returned in {elapsed.Seconds}sec");
            }
        }
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }

}
0 голосов
/ 18 сентября 2018

Я хотел сделать то же самое.Я видел StopWatch(), но так и не смог заставить его работать.Так что я просто сфальсифицировал свою собственную:

TimeSpan ts = DateTime.Now.TimeOfDay;
Debug.Print("\n\nProcess Started---- " + processName + " ----  " + ts + "\n\n");
/*
 * code here
 */
TimeSpan fts = DateTime.Now.TimeOfDay;
Debug.Print("\n\nProcess Ended---- " + processName + " ----  " + fts + "\n");
Debug.Print("Time Elapsed----  " + (fts - ts) + " \n\n");

Это, вероятно, не самый быстрый или самый чистый.Но это говорит мне то, что я хочу знать.Вам также понадобится оператор using System.Diagnostics;, чтобы печатать на debug window.

Примечание: если вы можете заставить StopWatch() работать на вас, то я определенно рекомендую этоэтот.Это было только мое решение для моего кода.

0 голосов
/ 18 сентября 2018

Что вы ищете, это StopWatch, это пример:

var watch = System.Diagnostics.Stopwatch.StartNew();
// Run your query
watch.Stop();
//This is the time it took in miliseconds
var elapsedTime = watch.ElapsedMilliseconds;

Проверьте этот вопрос , почему вы не должны использовать DateTime.

0 голосов
/ 18 сентября 2018

Я полагаю, если вы получите время сервера (DateTime.Now) до и после выполнения SQL и найдете разницу, которая даст вам прошедшее время.

...