界面上放置一个 TextBox,用于修改 URL,然后放置一个 BUTTON,添加 Click 事件响应,在响应函数里创建一个 BackgroundWorker 实例,然后把你的那些逻辑代码放到 BackgroundWorker 的 DoWorker 事件上。
嗯,是可以用backgroundworker控件,只不过它这个获取ip集合有两种方式,一种是你说的这种可以用这个控件来做的,另外一种方式就是直接读取配置文件里的url,来获取ip集合的
嗯,是可以用backgroundworker控件,只不过它这个获取ip集合有两种方式,一种是你说的这种可以用这个控件来做的,另外一种方式就是直接读取配置文件里的url,来获取ip集合的,我的疑惑主要是在于,比如线程A用来获取ip集合,获取的ip集合还要进行判断是否重复,是否有效,然后存入数据库这块不知道怎么弄了
@小龙女-90hou: 假设你得到了 ip 的集合为 List<IP> list,然后
list = list.Distinct().Where( o => { return IsIPValid(O);}).ToList();
然后:
StartSqlTransaction;
list.Foreach(o=> {
cmd.CommandText = "update if not exist ......"; // 自己去搜下这个语句});
}
EndSqlTransaction;
@Launcher: 这个是用到了ling和事务来实现的吧,因为获取到的ip集合肯定很多,使用task类加多线程会不会更快一点呢,
@小龙女-90hou: Parallel.For(0,list.Count, i =>{
...............
});
这只是简单的并行,效果不理想,你应该结合使用 sqlbulkcopy 方式:http://www.developerfusion.com/article/122498/using-sqlbulkcopy-for-high-performance-inserts/
然后使用 WriteToServerAsync 方法进一步提高性能。
其实可以用异步方式
task类就是这种异步方式吧,可以说具体点吗