草庐IT

并发控制

全部标签

c# - 执行大量并发 INSERT 时如何避免 "Violation of UNIQUE KEY constraint"

我正在执行许多并发SQLINSERT语句,这些语句在UNIQUEKEY约束上发生冲突,即使我也在单个事务中检查给定键的现有记录。我正在寻找一种方法来消除或最大限度地减少我遇到的碰撞数量,同时又不会损害性能(太多)。背景:我正在开发一个ASP.NETMVC4WebApi项目,该项目接收大量对INSERT记录的HTTPPOST请求。它每秒收到大约5K-10K请求。该项目的唯一职责是删除重复数据和汇总记录。写起来很重;它的读取请求量相对较小;所有这些都使用带有IsolationLevel.ReadUncommitted的事务。数据库架构这是数据库表:CREATETABLE[MySchema]

c# - .NET 4.0 并发收集性能

我正在尝试编写一个程序,在该程序中,我通过将项目放入来自不同线程的集合中并在迭代集合并处理项目的单个线程中清理它们来安排要删除的项目。在这样做之前,我想知道什么会产生最佳性能,所以我尝试了ConcurrentBag、ConcurrentStack和ConcurrentQueue并测量了添加10000000个项目所需的时间。我用下面的程序来测试这个:classProgram{staticListlist=newList();staticConcurrentBagbag=newConcurrentBag();staticConcurrentStackstack=newConcurrentS

c# - 如何使用 Lazy 处理并发请求?

我是C#的新手,正在尝试了解如何使用Lazy。我需要通过等待已运行操作的结果来处理并发请求。数据请求可能会同时使用相同/不同的凭据。对于每组唯一的凭据,最多可以进行一个GetDataInternal调用,该调用的结果会在准备就绪时返回给所有排队的服务员privatereadonlyConcurrentDictionary>Cache=newConcurrentDictionary>();publicDataGetData(Credentialcredential){//Thisinstancewillbethrownawayifacached//valuewithour"credent

c# - 使用 Task.Run() 写入控制台失败

我的一位同事发现我们的代码存在问题,花了一段时间才查明到底发生了什么,但这个简单的例子可以最好地证明这一点://FailsclassProgram{staticvoidMain(string[]args){Task.Run(()=>Console.WriteLine("HelloWorld"));Console.ReadKey();}}//WorksfineclassProgram{staticvoidMain(string[]args){Console.Write(String.Empty);Task.Run(()=>Console.WriteLine("HelloWorld"));

c# - 不同的 DLL,但在控制台应用程序和网站中应该相同

我有一个控制台应用程序和网站使用相同的System.Runtime.Serialization.Primitives.dll程序集。但是,当我运行该网站时,我的程序集是右边那个,但是如果我运行安慰应用程序,该网站的DLL变成了左边那个并导致错误。这两个项目都是v4.7,在我将所有项目升级到该框架后开始出现这种情况。两个项目都有这个 最佳答案 通过对相同DLL的不同引用来解决此问题的方法:第1步:在VisualStudio2015上创建一个新的网络应用第2步:检查问题是否仍然存在于这个新的网络应用程序项目中。如果答案是否并且问题不再存

c# - 控制台应用程序的 IOC?

谁能想到一个好的解决方案来将IOC放入控制台应用程序中?目前我们只是使用一个带有以下方法的静态类:publicstaticTResolve(){returndependencyResolver.Resolve();}我希望体验是无缝的,但想不出从控制台应用程序实现这一点的方法。 最佳答案 您必须在某处调用服务定位器(Resolve())。诀窍是让它尽可能远离。对于控制台应用程序,此引导发生在Main()中方法。在那里做,并尽量减少其他地方的Resolve调用,你会很棒。对于大多数依赖项,使用构造函数注入(inject)。

c# - 如何处理来自控制台应用程序的 COM 事件?

我正在使用来自第三方库的COM对象来生成周期性事件。当我从Winforms应用程序使用库时,将对象作为类成员并在主窗体线程中创建它,一切正常。但是,如果我从另一个线程创建对象,我不会收到任何事件。我的猜测是我需要在用于创建对象的同一个线程中有某种事件循环。我需要从控制台应用程序使用这个对象。我想我可以使用Application.DoEvents,但我不想在控制台应用程序中包含Winforms命名空间。我该如何解决这个问题?更新3(2011-06-15):商家终于回复了。简而言之,他们说Application.Run创建的消息泵与Thread.Join创建的消息泵之间存在一些差异,但他们

c# - HttpWebResponse 不会针对并发出站请求进行扩展

我有一个用C#编写的ASP.NET3.5服务器应用程序。它使用HttpWebRequest和HttpWebResponse向RESTAPI发出出站请求。我已经设置了一个测试应用程序来在单独的线程上发送这些请求(以模糊地模拟针对服务器的并发)。请注意,这更像是一个单声道/环境问题,而不是代码问题;所以请记住下面的代码不是逐字的;只是功能位的剪切/粘贴。这是一些伪代码://threadedclientpieceintnumThreads=1;ManualResetEventdoneEvent;using(doneEvent=newManualResetEvent(false)){for(i

c# - 为什么不控制更新/刷新中间过程

我有一个带有statusLabel的Windows窗体(C#.NET),我似乎无法在事件处理程序方法的进程中间进行更新。我的代码看起来像这样......voidProcess_Completed(objectsender,EventArgse){stringt="Processisfinished!";this.Invoke(newStatusLabelUpdator(updateStatusLabel),newobject[]{t});}voidProcess_Started(objectsender,EventArgse){stringt="Processhasbegun";thi

c# - 控制台在类库 c# 中不可用

这个问题here似乎与我所经历的相反。我无法从新类库中访问控制台。我在顶部有usingSystem;。我在Windows8上使用visualstudio11。我怀疑这在更新中丢失了,所以这意味着我做错了什么。此外,一旦这一切正常,控制台是否可以在可移植类库中使用?编辑这里只是我做的一个测试文件usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceAdamLib.util.ConsoleSupport{classS