У меня есть приложение WPF, использующее C # и VS.И я использую базу данных Access.У меня есть цикл, который должен работать в течение максимального времени 500 мс, но он занимает 570 + -
В моей программе у меня есть время ожидания ~ 340 мс и более ~ 160 мс, которые я могу оптимизировать
После проверки с помощью секундомера я обнаружил, что когда я записываю свои данные в базу данных Access, это занимает около 50 мс (у меня там 3 записи).И я понятия не имею, как оптимизировать запись в базу данных
Мой класс, который подключается и использует базу данных, - это внешний файл DLL, который выглядит следующим образом (я также привожу пример одного метода, который занимает 50 мс времени выполнения,названный как "AddDataToLocalHeaderResult"):
namespace DataBaseManager
{
public class LocalPulserDBManager
{
private string localConnectionString;
private string databaseName = $@"C:\Pulser\LocalPulserDB.mdb";
private readonly int _30DaysBack = -30;
private static readonly Lazy<LocalPulserDBManager> lazy =new Lazy<LocalPulserDBManager>(() => new LocalPulserDBManager());
public static LocalPulserDBManager LocalPulserDBManagerInstance { get { return lazy.Value; } }
private void CreateConnectionString()
{
localConnectionString = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={databaseName};Persist Security Info=True";
}
private LocalPulserDBManager()
{
CreateConnectionString();
}
public void AddDataToLocalHeaderResult(string reportNumber,string reportDescription,
string catalog,string workerName,int machineNumber, Calibration c,string age)
{
if (IsHeaderLocalDataExist(reportNumber, catalog, machineNumber, c) == false)
{
using (OleDbConnection openCon = new OleDbConnection(localConnectionString))
{
string query = "INSERT into [HeaderResult] ([ReportNumber],[ReportDescription],[CatalogNumber], " +
"[WorkerName], [LastCalibrationDate], [NextCalibrationDate], [MachineNumber], [Age]) " +
"VALUES (@report ,@reportDescription ,@catalog, @workerName," +
" @LastCalibrationDate, @NextCalibrationDate, @machineNumber, @age)";
using (OleDbCommand command = new OleDbCommand(query))
{
command.Parameters.AddWithValue("@report", reportNumber);
command.Parameters.AddWithValue("@reportDescription", reportDescription);
command.Parameters.AddWithValue("@catalog", catalog);
command.Parameters.AddWithValue("@workerName", workerName);
command.Parameters.AddWithValue("@LastCalibrationDate", c.LastCalibrationDate);
command.Parameters.AddWithValue("@NextCalibrationDate", c.NextCalibrationDate);
command.Parameters.AddWithValue("@machineNumber", machineNumber);
command.Parameters.AddWithValue("@age", age);
command.Connection = openCon;
openCon.Open();
int recordsAffected = command.ExecuteNonQuery();
openCon.Close();
}
}
}
}
....
....
METHODS
....
}
}
В моей исполняемой программе я использую это так:
У меня есть такие использования: using static DataBaseManager.LocalPulserDBManager;
и в моемкод, который я выполняю таким методом LocalPulserDBManagerInstance.AddDataToLocalHeaderResult(ReportNumber, Date_Description,CatalogNumber, WorkerName, (int)MachineNumber, calibrationForSave, AgeCells);
Одна из моих таблиц базы данных доступа выглядит так: ![enter image description here](https://i.stack.imgur.com/AJY9t.png)
Одна строка в этой таблице выглядит так:![enter image description here](https://i.stack.imgur.com/H4OYx.png)
50MS это нормальное время выполнения в такой ситуации?Если здесь отсутствует какая-либо информация, пожалуйста, сообщите мне ...
********************* РЕДАКТИРОВАНИЕ **************************
Я изменил свой метод AddDataToLocalHeaderResult
, так как первая команда сказала мне, что я получил тот же результат
public void AddDataToLocalHeaderResult(string reportNumber,string reportDescription,
string catalog,string workerName,int machineNumber, Calibration c,string age)
{
if (IsHeaderLocalDataExist(reportNumber, catalog, machineNumber, c) == false)
{
using (OleDbConnection openCon = new OleDbConnection(localConnectionString))
{
string query = "INSERT into [HeaderResult] ([ReportNumber],[ReportDescription],[CatalogNumber], " +
"[WorkerName], [LastCalibrationDate], [NextCalibrationDate], [MachineNumber], [EditTime], [Age]) " +
"VALUES (@report ,@reportDescription ,@catalog, @workerName," +
" @LastCalibrationDate, @NextCalibrationDate, @machineNumber,@edittime, @age)";
DateTime dt = DateTime.Now;
DateTime edittime = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
using (OleDbCommand command = new OleDbCommand(query))
{
command.Parameters.AddWithValue("@report", reportNumber);
command.Parameters.AddWithValue("@reportDescription", reportDescription);
command.Parameters.AddWithValue("@catalog", catalog);
command.Parameters.AddWithValue("@workerName", workerName);
command.Parameters.AddWithValue("@LastCalibrationDate", c.LastCalibrationDate);
command.Parameters.AddWithValue("@NextCalibrationDate", c.NextCalibrationDate);
command.Parameters.AddWithValue("@machineNumber", machineNumber);
command.Parameters.AddWithValue("@edittime", edittime);
command.Parameters.AddWithValue("@age", age);
command.Connection = openCon;
openCon.Open();
int recordsAffected = command.ExecuteNonQuery();
openCon.Close();
}
}
}
}