ฉันมีเรียบง่าย query
var count = await _context.ExchangeRate.AsNoTracking().CountAsync(u => u.Currency == "GBP");
โต๊ะมีแค่ 3 คอลัมน์และ 10 อยละของแถวสำรองข้อมูลออกมา
ตอนที่ฉันพยายามที่จะประมวลผลการสืบค้นอกจากจัก 5 โครงการมันคือการ 2.3 วินาทีสำหรับครั้งแรกและ 500ms(+-100)สำหรับต่อมาขอร้องให้. ตอนที่ฉันเจอที่เดียวกับการร้องขอใน SSMS มันเป็นคืนอยู่เกือบจะไม่มีเวลา(45ms ย่างที่เห็นในภาษา sql วิเคราะห์พฤติกรรม).
ฉันต้องการจัดเตรียมไว้ ARITHABORT ใน EF จาก ที่นี่
ตอนที่ฉันเห็นในภาษา sql วิเคราะห์พฤติกรรมมันเป็นการตั้งค่า ARITHABORT อยู่แต่ยังคงสืบค้นต้องใช้เวลาเดียวกันสำหรับคนแรกการร้องขอฟวิ่งแอนด์โลนแต่พลาดและโดนร้องขอไป
ยังไงฉันก็จะประสบความสำเร็จในส่วความเร็วเหมือนกับ SSMS query ต้องใช้ความเร็วที่มากมาย ฉันต้องการสืบค้นที่จะหนีไปจริงความเร็วของฉันโครงการมีสำคัญที่สุต้องการกลับมาตอบสนองใน 1 วินาที(จำเป็นต้องทำให้ atleast 5 ง่าย DB โทรหา..ถ้า 1 เรียกใช้ 500ms แล้วมันเป็นการข้าม 1 วินาทีสำคัญที่สุ)
แก้ไข
พยายามกับแม้แต่ ADO.Net. การประหารงเวลาไปตามที่เห็นในภาษา sql วิเคราะห์พฤติกรรมคือ 40ms ที่ไหนที่เมื่อมันถึงรหัสมันคือเกือบจะ 400ms. ดังนั้นมันจะแตกต่างนักหนาเลย
using (var conn = new SqlConnection(connectionString))
{
var sql = "select count(ExchangeRate) as cnt from ExchangeRate where Currency = 'GBP'";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SET ARITHABORT ON; " + sql;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
var t1 = DateTime.Now;
var rd = cmd.ExecuteReader();
var t2 = DateTime.Now;
TimeSpan diff = t2 - t1;
Console.WriteLine((int)diff.TotalMilliseconds);
while (rd.Read())
{
Console.WriteLine(rd["cnt"].ToString());
}
conn.Close();
}