C# OleDb应用程序在Windows 7上运行缓慢

C# OleDb应用程序在Windows 7上运行缓慢,c#,performance,windows-7,ado.net,windows-xp,C#,Performance,Windows 7,Ado.net,Windows Xp,我正在重构一个Windows窗体应用程序,它可以调整.mdb文件中的时间戳。该程序根据离午餐、休息时间、工作日结束时间等因素对打卡次数进行上下取整,并根据加班要求计算工资。它还用作GUI,用于查找特定的时间条目并手动更正错误的穿孔(错误的客户id、任务编号等)。没什么太复杂的。该应用程序最初是在2004年使用ADO.Net编写的。它在办公室的XP计算机上运行良好,但在任何运行Windows7的计算机上都会立即崩溃,这就是我开始重构它的原因。我使用.NETReflector反编译了它,并制作了一个

我正在重构一个Windows窗体应用程序,它可以调整.mdb文件中的时间戳。该程序根据离午餐、休息时间、工作日结束时间等因素对打卡次数进行上下取整,并根据加班要求计算工资。它还用作GUI,用于查找特定的时间条目并手动更正错误的穿孔(错误的客户id、任务编号等)。没什么太复杂的。该应用程序最初是在2004年使用ADO.Net编写的。它在办公室的XP计算机上运行良好,但在任何运行Windows7的计算机上都会立即崩溃,这就是我开始重构它的原因。我使用.NETReflector反编译了它,并制作了一个c#项目,我一直在VisualStudioExpress 2012中工作。在重新编译之前,我必须修复一些语法错误,但在修复之后,我有了一个完全可以在Windows 7上运行的应用程序(我对原始应用程序进行了大量测试,我相信重新编译的版本能够正确执行调整)。我不能告诉你为什么它只做了这么少的修改,但你已经做到了(我也不介意找出答案,但这不是我的主要问题)。我遇到的问题是,在运行XP的恐龙电脑上,一个计算需要约1分钟,而在运行Windows7的全新开箱即用的桌面电脑上,这个计算需要约20分钟。此特定计算涉及在应用程序启动时自动处理未处理的记录(由表中的布尔字段标记)。记录来自的表有约235000条记录,其中约250条记录标记为未处理。将未处理记录的数量减少到5条需要花费约10分钟的时间,而将总记录的数量减少到几千条会使程序几乎在瞬间运行;然而,在这一点上,这并不是一个真正的选择。在调试模式下运行应用程序使我可以将问题追溯到以下方法:

[HelpKeyword("vs.data.TableAdapter"), DebuggerNonUserCode, DataObjectMethod(DataObjectMethodType.Select, false)]
    public virtual dsHours.workDataTable GetDataByWeek(string EmployeeID, DateTime? Date_Entered, DateTime? Date_Entered1)
    {
        this.Adapter.SelectCommand = this.CommandCollection[1];
        if (EmployeeID == null)
        {
            this.Adapter.SelectCommand.Parameters[0].Value = DBNull.Value;
        }
        else
        {
            this.Adapter.SelectCommand.Parameters[0].Value = EmployeeID;
        }
        if (Date_Entered.HasValue)
        {
            this.Adapter.SelectCommand.Parameters[1].Value = Date_Entered.Value;
        }
        else
        {
            this.Adapter.SelectCommand.Parameters[1].Value = DBNull.Value;
        }
        if (Date_Entered1.HasValue)
        {
            this.Adapter.SelectCommand.Parameters[2].Value = Date_Entered1.Value;
        }
        else
        {
            this.Adapter.SelectCommand.Parameters[2].Value = DBNull.Value;
        }
        dsHours.workDataTable dataTable = new dsHours.workDataTable();
        this.Adapter.Fill(dataTable);
        return dataTable;
    }

WorkDataTable类只是一个扩展System.Data.DataTable并实现System.Collections.IEnumerable的类,并在.mdb后端为工作表添加特定格式。如果有人能给我指出正确的方向,让我明白为什么这段代码运行得这么慢,我会非常感激。当然,如果您需要更多的代码/信息,我愿意提供。

这种方法没有根本问题。问题可能是在处理过程中调用了多少次。尝试重新计算sql,一次提取所有数据,然后在所有数据都在内存中的情况下进行处理。使用LINQ,进行这些更改应该很简单。从MS Access更改为SQL Server Express也不会有任何影响。

谢谢。看起来这个方法调用得太频繁了,所以我正在努力改变这种情况。即便如此,该程序在XP上运行得足够好,你知道为什么它在7上运行得这么慢吗?它可能是Jet OleDb驱动程序的版本。在这种情况下,我尝试安装Microsoft Access Database Engine 2010并将其用作我的连接提供方。现在一切都很快,谢谢你的提示!