草庐IT

queue_inserter

全部标签

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

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

c# - 为什么 Stack<T> 和 Queue<T> 没有 Capacity 属性而 List<T> 有?

Capacity属性在List中是否比在其他集合(如Stack和Queue)中更有用?还是有其他方法可以获取Stack或Queue的容量? 最佳答案 我认为List具有Capacity属性而Stack和Queue没有的原因是这些类型的正常用法是不同的。对于List,用大量值填充它是相当常见的,甚至在它创建一段时间后也是如此。提供Capacity属性(和构造函数参数)有助于减少将大量项目添加到列表时将完成的重新分配的数量。Stack和Queue另一方面,它们不会立即添加大量项目已创建。据推测,Microsoft认为不值得添加Capac

c# - "Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF"带复合键

我们最近向我们的数据库添加了一个新的“级别”——在整个数据库中的表中现有ID身份字段的上方/之前添加了一个键“Company_ID”。例如,如果一个表有ID然后是字段,它现在有Company_ID,然后是ID,然后是字段。这个想法是,这允许ID为提供给功能的每个不同的Company_ID值自动递增(Company_ID1可以有ID1、2、3等;Company_ID2可以有ID1、2、3等)。自增字段保持为ID。一个示例表是:[dbo].[Project]([Company_ID][int]NOTNULL,[ID][int]IDENTITY(1,1)NOTNULL,[DescShort]

c# - Visual Studio : Automatically insert a space after typing if(

我们有一个代码风格检查器,它在每次checkin之前运行,要求C#if语句的格式如下:if(condition)但是,我的肌肉内存力已经可以打字了:if(condition)有什么方法可以让VisualStudio2010在我键入没有空格的情况下自动插入该空格?我知道你可以设置它,当你粘贴代码时,它会自动执行此操作,但不会在键入时自动执行。谢谢! 最佳答案 工具>选项>文本编辑器>C#>格式化>间距然后选中/勾选Insertspaceafterkeywordsincontrolflowstatements,它列在Setothersp

c# - 奇怪的 Queue<T>.Enqueue(T item) 代码

在使用ILSpy进行反射时,我在Queue.Enqueue(Titem)中找到了这行代码-方法:if(this._size==this._array.Length){intnum=(int)((long)this._array.Length*200L/100L);if(num我只是想知道为什么有人会这样做?我认为这是某种整数溢出检查,但为什么要先乘以200L然后除以100L?这可能是早期编译器的问题吗? 最佳答案 通常先乘以再除以100是百分比计算-也许在原始代码中有一些constXxxPercentage=200或类似的东西。编译

c# - 我怎样才能让 VS2010 insert using statements 按照 StyleCop 规则规定的顺序

相关的默认StyleCop规则是:将using语句放在namespace中。按字母顺序对using语句进行排序。但是...Systemusing排在第一位(仍在尝试弄清楚这是否意味着只是usingSystem;或using系统[.*];).所以,我的用例:我发现了一个错误并决定我至少需要添加一个可理解的断言,以减轻下一个人调试的痛苦。所以我开始输入Debug.Assert(并且intellisense将其标记为红色。我将鼠标悬停在Debug上以及usingSystem.Diagnostics;和System.Diagnostics.Debug我选择前者。这会在所有其他using语句之后

c# - IDENTITY INSERT 和 LINQ to SQL

我有一个SQLServer数据库。该数据库有一个名为Item的表。项目有一个名为“ID”的属性。ID是我表上的主键。这个主键是一个增量值为1的整数。当我尝试插入记录时,我收到一条错误消息:Cannotinsertexplicitvalueforidentitycolumnintable'Item'whenIDENTITY_INSERTissettoOFF.".我正在尝试使用以下代码插入记录:publicintAddItem(Itemi){try{intid=0;using(DatabaseContextcontext=newDatabaseContext()){i.CreatedOn=

C# HttpRuntime.Cache.Insert() 不持有缓存值

我正在尝试使用HttpRuntime.Cache.Insert()来缓存价格值,但在清除之前似乎只保留了几个小时或更长时间。我究竟做错了什么?我希望该值在缓存中保留3天。HttpRuntime.Cache.Insert(CacheName,Price,null,DateTime.Now.AddDays(3),TimeSpan.Zero); 最佳答案 简答您的应用程序池或网站关闭得太早了。延长站点的空闲超时,延长运行该站点的池的应用程序池生命周期。提高内存分配和请求限制。完整答案如果您想知道什么时候以及为什么从缓存中删除某些内容,您需

c# - INSERT INTO 如果不存在 SQL Server

我的数据库结构如下:用户userid(PrimaryKey)username组groupid(PK)groupName用户组userid(ForeignKey)groupid(ForeignKey)用户第一次登录时,我希望将他们的信息添加到用户表中。所以基本上我想要的逻辑如果if(//userstabledoesnotcontainusername){INSERTINTOusersVALUES(username);}如何使用SQLServer/C#智能地执行此操作? 最佳答案 或者使用新的MERGE语法:mergeintousers

c# - 林克 : Delete and Insert same Primary Key values within TransactionScope

我想在一个事务中用新记录替换数据库中的现有记录。使用TransactionScope,我有using(varscope=newTransactionScope()){db.Tasks.DeleteAllOnSubmit(oldTasks);db.Tasks.SubmitChanges();db.Tasks.InsertAllOnSubmit(newTasks);db.Tasks.SubmitChanges();scope.Complete();}我的程序抛出System.InvalidOperationException:Cannotaddanentitythatalreadyexis