English 中文(简体)
接近安全地获得静态收集
原标题:Thread-safe access to static collection

我正在组建一个班级,它将有某种类型的高档。 目前,我有类似之处:

private static Dictionary<Type, List<PropertyInfo>> PropertyCache { get; set; }

这种做法是否正确? 出于某种原因,我对<代码>static在<代码>Dictionary上的影响有点概括。 如果是正确的,那么,如果能够证明有不正确的方式,我就可以在我的法典的其余部分避免。

而且,这是否只是读物(我只想从收集中增加物品)?

如果出现差异,将永远宣布该财产为<条码>私人<>。

Thanks in advance

www.un.org/Depts/DGACM/index_russian.htm

EDIT:

在与Joon Skeet在答复意见中进行讨论之后,使用方式是:

// I will do this
PropertyCache.Add(typeof(string), new List<PropertyInfo>());
PropertyCache.Remove(typeof(string));

// I will never do this 
PropertyCache = new Dictionary<Type, List<PropertyInfo>>();

我永远不会对收集工作犹豫不决,只能靠钥匙。

最佳回答

让成员<代码>static使成员能够比一名助手更方便地出入。 删除<条码>。 字塔是指由多个透镜使用的安全,意思是物体在被定义的多个物体之间共享。

执行<条码>散列接口的收集,可登录<条码>SyncRoot。 a 反对确保时仅有一对read,可执行一系列指示,使收集工作发生变化。 利用SyncRoot进行多读应用

lock(((ICollection)myObject).SyncRoot)
{
    //Code that should be executed by only one concurrent thread
    //This is add/insert/remove/iterate/clear/etc.
}

除此手册外(或旧教学方法),还有共同的目标。 NET 4 基本如此,但有一些其他特别检查。 这些物体大多是最佳性能,因为你可以用于完全安全物体。 如果你重新使用有关物体的一套非常受控和小的行动(请加上1项,删除方法,从不列举整个收集方法,而只是查阅具体、已知的条目),那么你可以采用上文提到的“轻重”<条码>锁(<>)”的例子来取得更好的业绩。

尤其当一劳永逸地将多个物体加起来时,你会看到这一点。 每一件添加行动使用并行物体是锁定和锁定的原子。 如果你在一段紧凑的路上这样做,你就会失去一丝不.的表现,无法接过夜。 如果另一条路面正试图读到,准入的争论就比较少。 如果你使用钟表,你就只能获得锁,在快速、紧凑的路口中添加物体,然后释放锁。 想要进入物体的路口将等待更长时间,但总体而言,行动应当更快完成。 还铭记差异通常如此之少,并不值得考虑,而且几乎在所有情况下都属于过早优化的范畴。

问题回答

如果你需要改变变量的价值,那么你可能只读一读。

如果你重新使用“NET”4,你应考虑使用Con CurrentDictionary——否则,我可能的话说,每接触一次便可打上24小时。 。 等等 我亲自采取最简单的安全做法。

请注意,以read熟的方式对独裁者的内容进行篡改——希望你不需要。

你所显示的绝不是安全的。 如果多管线能够同时插入或去除物品,你可能会遇到问题。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签