【发布时间】:2019-11-21 16:38:35
【问题描述】:
我不确定这个正确的站点 Stack Exchange。如果错了,告诉我是哪一个。
我有自己的程序(C#、WinForms)和两台带 CPU 的计算机:
- 英特尔酷睿 i5-2320,3200 MHz(Windows 7)
- 英特尔赛扬 G1820 2700 MHz(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;
}
【问题讨论】:
-
这几乎可以肯定而且完全是环保的。谁知道发生了什么,即 celeron 可能是热节流,它可能有病毒扫描程序或其他任何东西。您的代码中没有任何内容表明这是代码问题。另外应该知道这种类型的测试是有问题的,而不是最好的基准测试方法,DB 以及它如何启动或任何数量的设置可能存在差异
-
更不用说赛扬是双核的,而 i5 是带有核心升压的四核。此外,开箱即用的 Windows 10 比 7 更“繁忙”。以更少的功率消耗更多的负载可能解释了性能参差不齐的原因..
标签: windows-7 windows-10 cpu performance c#