2011-04-26 122 views
0

我已经构建了一个C#应用程序,每10 ms更新一次MySQL数据库表。该应用程序为每个更新创建一个单独的线程。使用Workbench,我可以看到有很多连接,并且一段时间以来,这已经非常成功。最近,我发现在成功执行2-3小时后,我得到一个异常,表示“表xxxx未找到”。我有一个使用实体框架的阅读和更新,如下所示实时更新期间的MySQL异常

try 
    { 
     u5s = (from u in cxt.universe5s 
       where u.CATEGORY == tval 
       select u).ToList(); 
     . . . 
     u5.PC_CHANGE = chval; 
     cxt.SaveChanges(); 
    } 
    catch (Exception myEx) 
    { 
     //throws my 'table not found' exception here 
    } 

使用NET 4.0和MySql 5.5.9。有没有其他人有这样的经历?这可能是由于连接不足造成的吗?就保存更改后关闭连接而言,这种情况下的最佳做法是什么?

真诚 理查德

回答

1

这听起来像一个并发的问题。您可能会尝试锁定单个连接对象。这也将减轻服务器的压力。详细请参照http://msdn.microsoft.com/en-us/library/c5kehkcz%28v=vs.80%29.aspx

希望这会有所帮助。

+0

H'mm。我依靠MySQL来解决并发问题。我不希望我的锁减慢访问速度,但是现在我为每个更新生成一个线程的意义不大。你给的链接是相当有帮助的,虽然我不确定你的意思是通过锁定一个“连接对象”。这是我的示例代码中的数据库上下文“cxt”?那么,我会用“lock(cxt){...}将所有内容都包含在try块中吗?MSDN引用似乎强调使用私有变量作为锁。我对于什么最适合用作锁 – viejo 2011-04-27 15:33:39

+0

其实没关系,你锁定什么对象,只要确保每个线程都锁定在同一个对象上 如果你喜欢,你可以为这个作业创建一个专用对象: private object connectionLock = new对象(); – LueTm 2011-04-27 16:46:07

+0

好吧,那就像你在链接中给出的例子一样,谢谢,我会这样实现的,感谢你的帮助。 – viejo 2011-04-27 18:02:11