Win7多核上的DAO大型查询锁定 我有一个C++应用程序,它通过DAO使用Jet数据库。大型查询在Vista中运行良好,但在多核计算机的Win7下会被锁定。我试过jet 3.5和4.0。两者都失败了。我已尝试在调用prog my app时禁用线程,但仍然失败。

Win7多核上的DAO大型查询锁定 我有一个C++应用程序,它通过DAO使用Jet数据库。大型查询在Vista中运行良好,但在多核计算机的Win7下会被锁定。我试过jet 3.5和4.0。两者都失败了。我已尝试在调用prog my app时禁用线程,但仍然失败。,c++,windows-7,dao,jet,C++,Windows 7,Dao,Jet,调用SetProcessAffinityMask1所需的详细信息:每个操作系统上的Jet和版本、示例SQL、表大小等。谢谢,工作正常。我检查主要版本为6或更高版本的OSVERSIONINFO,然后检查系统信息中是否有2个或更多处理器。然后使用随机数选择一个CPU,以尽可能分散负载,并为当前进程和该CPU设置ProcessAffinityMask。关于问题的细节,我了解到这不是一个DAO唯一的问题。我创建了一个测试应用程序,通过OleDb Provider=Microsoft.Jet.OleDb.

调用SetProcessAffinityMask1所需的详细信息:每个操作系统上的Jet和版本、示例SQL、表大小等。谢谢,工作正常。我检查主要版本为6或更高版本的OSVERSIONINFO,然后检查系统信息中是否有2个或更多处理器。然后使用随机数选择一个CPU,以尽可能分散负载,并为当前进程和该CPU设置ProcessAffinityMask。关于问题的细节,我了解到这不是一个DAO唯一的问题。我创建了一个测试应用程序,通过OleDb Provider=Microsoft.Jet.OleDb.4.0提交查询,我得到了相同的挂起。这句话的意思是:从main中选择SUM[Amount1]我的文件确实有320000条记录,在结果不同的机器上有相同版本的Jet吗?你实际上不需要检查是否有两个处理器。在单处理器单核机器上,您会发现您运行的是核心0,并将自己限制在该核心上—无论如何,您都是这样。我没有使用随机数的原因是,操作系统已经选择了当前的内核作为合适的内核。GetCurrentProcessorNumber运行良好,您只需确保不在XP中尝试即可。是,两台机器上的Jet版本相同。用户降级到Vista,但仍然存在问题。我目前的想法是,有问题的用户都在使用Intel I7和Xeon。