Я не уверен, что это правильный сайт Stack Exchange. Скажи мне, какой из них, если это не так.
У меня есть собственная программа (C #, WinForms) и два компьютера с процессорами:
- Intel Core i5-2320, 3200 МГц (Windows 7)
- Intel Celeron G1820 2700 МГц (Windows 10)
Программа работает совместно с базой данных Access (Entity Framework Core). Например, загрузите несколько записей для отображения в таблице, добавьте, обновите и удалите записи.
Моя проблема в производительности. Там нет проблем для первого компьютера. Вот часть журнала:
Load page: 00:00:01.8143480
LoadSetData(): 00:00:00.1475554
===! Load time: 00:00:02.3864354 !===
Update() contract: 00:00:00.1656815
Update() contract: 00:00:00.0436293
Второй компьютер делает странные вещи. Можно сделать так:
Load time: 00:00:17.8201432
DeleteSubject(): 00:00:25.7574691
Update() contract: 00:00:10.1656815
А может так:
Load time: 00:00:02.3210213
DeleteSubject(): 00:00:00.4818238
Update() contract: 00:00:00.1836919
Код программы одинаков во всех случаях. Разница лишь в ширине бита. Первый компьютер запускает x86 (потому что установлен Office Access x86). Второй компьютер x64. Компилировать через Visual Studio.
Я не могу понять, почему такое значительное снижение производительности. Это как что-то захватывает весь процессор. Не позволяю моей программе работать. Но в другое время даю работу правильно.
Не думаю, что это имеет какое-либо отношение к коду программы. Ведь второй компьютер может адекватно обработать мою программу. По логам.
В чем может быть причина этой проблемы?
Например, я могу дать типичный код доступа к базе данных, чтобы понять, что это не «тяжелая» задача в течение длительного времени.
internal bool DeleteContract(int id)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
bool result = true;
try
{
using (ModelContext model = new ModelContext())
{
Contracts c = model.Contracts.Single(x => x.Id == id);
model.Remove(c);
model.SaveChanges();
}
Count--;
}
catch (Exception ex)
{
result = false;
ShowMessage.Error("some text");
}
stopwatch.Stop();
logger.Debug("DeleteContract(): {0}", stopwatch.Elapsed);
return result;
}