开发随笔-处理.net 多线程访问数据库问题

来源:互联网 发布:2016中国粮食浪费数据 编辑:程序博客网 时间:2024/04/30 14:48

我的上篇文章的问题,经过这两天的努力终于有了结果

http://blog.csdn.net/hliq5399/article/details/7345377

我采用.net ThreadPool 确实不能解决我的问题.

 

      public void ProcessQueue()        {            while (CCHelper.GetQueueCount() > 0)            {                  for (int i = 0; i < iMaxThreads; i++)                {                   WaitCallback a = new WaitCallback(ProcessOneQueue);                   ThreadPool.QueueUserWorkItem(a, null);                   Thread.Sleep(5000);               }            }        }               public void ProcessOneQueue()        {            //处理队列,提交网关.        }


Thread.Sleep(5000) 是不能解决我的问题的,这个太不保险了,线程池主要是不能灵活控制,我设断点调式发现只要访问数据库的地方,就不能继续跟踪断点了.

于是我找了资料,发现很多人都是说SqlConnection多线程是需要单独创建的.

http://blog.csdn.net/hliq5399/article/details/7350466

详细看了我的代码后,发现SqlConnection是单独创建的.

后面决定手工创建线程,来解决问题:

Thread[] threads = new Thread[iMaxThreads];            for (int i = 0; i < iMaxThreads; i++)            {                threads[i] = new Thread(new ThreadStart(ProcessOneQueue));                threads[i].Start();            }

private object obj = new object();public void ProcessOneQueue(){  lock(obj){//处理队列,提交网关}}

ok,问题解决.

同事介绍说,可以用VS2010&.Net 4.0 之并行运算(Parallel)(For、Foreach)来解决

可以看我转载的这篇文章:
http://blog.csdn.net/hliq5399/article/details/7352166 

这篇是后面找到的,大家可以看看

http://www.cnblogs.com/Henllyee/archive/2010/05/01/ParallelProgaramming1.html

时间的关系,个人感觉还没有完全深入,后续再跟.

原创粉丝点击