1共用一个连接就可以 2其实一样可以用lock实现,把数据库 *** 作写成一个函数,函数内加lock。c#会安排他们排队 比如 private static object privateObjectLock = new object(); public static xxoo() { lock(privateObjectLock) { //数据 *** 作语句 } } } 你在一个函数里实现数据库 *** 作。然后线程 *** 作数据库都调用他
在Android中规定只有UI thread可以更新界面,但是我们开发中会经常遇到一些耗时的 *** 作,这些 *** 作可能会很花费时间,最终的结果却要更新到UI上
这种情况下,如果我们将这个 *** 作放到UI thread中做就很可等挡住UI线程,从而导致ANR Application Not Responding,因此我们都会new一个工作
线程,在这个线程中做复杂的耗时 *** 作,待得到结果后,再将结果更新到UI。
子线程获取数据,更新UI的方法大概有这样几种:
1、通过AsyncTask+progressbar的方法,在AsyncTask的doInBackground()中做耗时的 *** 作,在onProgressUpdate(Progress…) 中更新UI(进度条)
此方法在主线程执行,用于显示任务执行的进度。onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理 *** 作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回。
2、通过Handler的方法,从子线程中发消息Msg,在Handler中处理该消息(在UI thread中执行),并updateUI。
3、如果你的界面是listView的形式,不妨用listAdapter绑定数据库,在子线程接收到实时数据跟新到provider中,然后触发listView的自动更新。
思路:一次加载部分A数据到内存,然后开启多个线程处理,处理的结果保存到内存,结果达到一定数量,写入B
1:加载A数据:A表单行数据平均占用空间大小1K,就加载1000条,总共也就1M左右,按照这个算法去加载,加载数量自行设定,一次数据库加载完毕保存到集合中List,作为源数据集合
2:开启多个线程,循环从源数据集合中取数据进行处理,处理结果保存到结果数据集合中,当结果数据集合数量达到1000(自行设定),暂停其他线程,写入数据到B,写入完毕清空结果数据集合后继续执行。当当前源数据集合中的数据库处理完毕,清空当前的源数据集合,继续从A表取数据保存到该集合中,直到A表没有数据为止
3:所有数据处理完毕,所有线程结束,如果结果数据集合中还有数据,继续写入到B表,执行写入C *** 作
4,清空A表
以上就是关于c# 多线程 *** 作数据库全部的内容,包括:c# 多线程 *** 作数据库、怎么实现把子线程接收到的实时数据传送给UI界面并用、多线程处理表数据性能问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)