在浏览了网络之后,许多讨论都涉及到了我问题的各个方面,但我没有看到适用于这里的模式:
我有一个基本的.NET WinForm应用程序,使用EF3.5和MySQL。该应用程序在大多数查询中运行良好,但是任何包含Distinct()的查询都非常缓慢,或者导致“操作完成前经过的超时时间或服务器没有响应”。在计算机的重新启动之后第一次运行异常。也就是说,当重新启动应用程序时,即使在停止并重新启动MySQL服务之后,Distinct()查询也可以从现在开始正常工作(即不到1秒)。
我不能通过重新运行应用程序或重新启动MySQL来重现问题,这一事实排除了EF编译或MySQL缓存是一个因素。只有在重新启动之后,问题才会重新发生。让我觉得这可能是.NET初始化问题或者其他与操作系统相关的问题。这个问题已经在XP和Win 7上观察到了。
任何想法都会受到赞赏。(关于在不重新启动机器的情况下尝试再现问题的想法,这是非常不切实际的:-)
更新:
EF生成的查询如下所示:
SELECT Distinct1.C2 FROM (
SELECT DISTINCT YEAR(Extent1.RecDate) AS C2
FROM dailyrecord AS Extent1
WHERE (Extent1.STN = 430030) AND (Extent1.WBAN = 99999)
) AS Distinct1;在mysql中运行这个程序第一次需要大约30次,甚至在重新启动mysql之后也要花费大约1次。重新启动后回到30岁。操作系统似乎第一次读取整个db文件,但之后没有读取(后续查询的HD活动非常少,即使修改了查询参数)。
我怎样才能刷新操作系统的读缓存来测试我的理论?
发布于 2012-11-30 12:55:34
经过相当多的测试之后,出现了这样的情况:
如有任何意见或评论,敬请见谅!
https://stackoverflow.com/questions/13453282
复制相似问题