Ben*_* Ae 1 c# multithreading dictionary
我得到包含多个重复行的大量数据.我想使用字典进行重复数据删除,然后将数据插入数据库.
将row.key不能被设置为DB的主键.所以,我不能使用"DB主键无法复制".
流程将是百万行.
我有两个计划,您认为哪个更快?
计划A:
try
{
dictionary.add(row);
insert into DB
}
catch
{}
Run Code Online (Sandbox Code Playgroud)
B计划:
if( ! dictionary.containskey(row.key) )
{
dictionary.add(row);
insert into DB
}
Run Code Online (Sandbox Code Playgroud)
那么如果我在这个过程中使用多线程呢?这将是访问同一块的多个线程.这会安全有效吗?
Ser*_*rvy 10
首先,这里没有键/值关系,因此一组而不是一个映射是合适的.您应该使用HashSet而不是a Dictionary来跟踪密钥.
接下来,查找基于散列的结构非常快,最重要的是,*不依赖于集合的大小.查找100万个项目HashSet与查找5个项目集一样快.这个常量值几乎肯定比依赖抛出的异常更快.
最后,a的Add方法HashSet指示是否添加了项目,因此您甚至根本不进行任何其他查找.
除此之外,除了性能不佳之外,使用控制流的异常也是不好的做法.出于代码清晰度的考虑,您应该将异常用于真正特殊的情况.
你可以用HashSet<T>.它的Add方法返回一个bool,表明该项已经在其中.
if(hashSet.Add(row.key))
{
insert into DB
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |