我想在我的应用程序中使用ConcurrentDictionary,但首先我需要确保我正确理解它是如何工作的.在我的应用程序中,我将有一个或多个线程写入或删除字典.而且,我将有一个或多个从字典中读取的线程.潜在地,所有这些都在同一时间.
我是否正确,ConcurrentDictionary的实现负责处理所有必需的锁定,并且我不需要提供自己的锁定?换句话说,如果一个线程正在写入或删除字典,那么读取线程(或另一个写入线程)将被阻止,直到更新或删除完成为止?
非常感谢.
在我的应用程序中,我使用StreamWriter将数据流式传输到文件.在调用Close()方法之前,是否有任何字节实际写入文件?如果答案是否定的,无论流有多大,这都是正确的吗?
兰迪
有人可以给我一个列表,或者指出我可以在哪里找到可以为可空类型的C#数据类型列表?
例如:
Nullable<int>没关系Nullable<byte[]>不是.我想知道哪些类型可以为空,哪些不可以.顺便说一下,我知道我可以在运行时测试它.但是,这是我们正在编写的代码生成器,所以我没有实际的类型.我只知道列是string或int32(等).
我们通常更喜欢使用空字符串('')作为默认值使所有varchar/ nvarchar列不可为空.团队中有人建议可以为空的更好,因为:
像这样的查询:
Select * From MyTable Where MyColumn IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
比这更快:
Select * From MyTable Where MyColumn == ''
Run Code Online (Sandbox Code Playgroud)
任何人都有经验来验证这是否属实?
任何人都可以建议我们在运行Profiler之外捕获发送到SQL Server的所有SQL语句的选项吗?我知道有几种方法可以做到这一点,但我想确保我不会忽略某些东西,例如现有的DM视图等.
非常感谢.
令我惊讶的是,我刚刚得知外键约束可能是不可信的.使用时添加约束时会发生这种情况WITH NOCHECK.当约束不受信任时,查询分析器不会将其用于查询计划生成.
请参阅:https:
//sqlserverfast.com/blog/hugo/2007/03/can-you-trust-your-constraints/
我的问题是这个.当一个约束是不可信的时,我可以检查的约束上有一个属性告诉我这个吗?我想我可以检查是否使用WITH NOCHECK添加约束,但是还有其他方法可以将约束标记为不可信吗?
以下查询在LastModifiedTime列的索引上使用索引搜索.
SELECT
CONVERT(varchar, a.ReadTime, 101) as ReadDate,
a.SubID,
a.PlantID,
a.Unit as UnitID,
a.SubAssembly
FROM dbo.Accepts a WITH (NOLOCK)
WHERE a.LastModifiedTime BETWEEN '3/3/2010' And '3/4/2010'
AND a.SubAssembly = '400'
Run Code Online (Sandbox Code Playgroud)
下面的查询与上述查询几乎完全相同,使用聚簇索引扫描,而不是LastModifiedTime上的索引.谁能告诉我为什么?而且,更重要的是,我可以做些什么来让SQL Server在LastModifiedTime列上使用索引,而不使用索引提示.
Declare @LastModifiedTimeEnd dateTime
Declare @LastModifiedTimeStart dateTime
SELECT
CONVERT(varchar, a.ReadTime, 101) as ReadDate,
a.SubID,
a.PlantID,
a.Unit as UnitID,
a.SubAssembly
FROM dbo.Accepts a WITH (NOLOCK)
WHERE a.LastModifiedTime BETWEEN @LastModifiedTimeStart And @LastModifiedTimeEnd
AND a.SubAssembly = '400'
Run Code Online (Sandbox Code Playgroud) 我有以下Linq查询:
var tmp =
from container in Container
join containerType in ContainerType on container.ContainerType equals containerType
where containerType.ContainerTypeID == 2
select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID};
var results = tmp.Select((row, index) => new { row.ContainerID, row.TypeID, ContainerIndex = index })
Run Code Online (Sandbox Code Playgroud)
这样,这很好.如果我添加以下内容,那么我可以在LinqPad中看到结果,我收到此消息标题中描述的错误:
results.Dump();
Run Code Online (Sandbox Code Playgroud)
这个错误不是LinqPad错误,它来自Linq,我不明白这是什么意思.
谢谢.
我有以下代码:
public partial class AuditLog : IBusinessEntity
{
public BusinessEntityType EntityType { get { return BusinessEntityType.AuditLog; } }
/// <summary>
/// Constructor accepting parameter initialization arguments
/// </summary>
/// <param name="userName"></param>
/// <param name="entity"></param>
/// <param name="command"></param>
/// <param name="commandText"></param>
public AuditLog(string userName, BusinessEntityType entity, AuditLogCommand command, string commandText)
{
this.Timestamp = DateTime.Now;
this.UserName = userName;
this.Entity = entity.ToString();
this.Command = command.ToString();
this.CommandText = commandText;
}
}
Run Code Online (Sandbox Code Playgroud)
这会生成CA2214警告.的BusinessEntityType和AuditLogCommand方法参数都是枚举.我不知道这里有什么问题,因此我不确定如何满足警告.
谢谢.
在我们的EF 5应用程序中,当我们在插入或更新时遇到SQL Server死锁错误时,我们会立即再次尝试操作.但是,当我们尝试这样做时,我们会收到以下错误:
"Conflicting changes detected. This may happen when trying to insert multiple entities with the same key."
Run Code Online (Sandbox Code Playgroud)
此错误不是来自SQL Server.这是EF 5错误.我们不会尝试使用相同的密钥插入多个实体.IOW,我们不会尝试插入重复的行.但是,我怀疑这个错误意味着别的东西.但我不完全确定我知道问题是什么.如果我不得不猜测,我会说在第一次尝试时,EF会看到尝试插入实体的位置.它因为死锁而失败.当我们立即再次尝试时,EF认为我们正在尝试使用相同的键再次执行相同的操作,并且不喜欢它.不知道怎么解决这个问题.