首页 / C# / c# – 在静态类中使字典安全吗?
c# – 在静态类中使字典安全吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在静态类中使字典安全吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1521字,纯文字阅读大概需要3分钟。
内容图文
![c# – 在静态类中使字典安全吗?](/upload/InfoBanner/zyjiaocheng/773/29de8c8d4a2e4a498208fec1ff4099a2.jpg)
到目前为止,我一直在C#库中开发静态类,所有方法显然都是静态的.传入任何被操纵的数据,因此这是线程安全的.但是,我正在实现一个功能,需要一个Dictionary来计算某些字符串ID,这些ID将针对每个线程生成不同的内容.显然使用类似下面的东西将不是线程安全的,因为多个线程将使用相同的字典并弄乱其状态:
private static readonly Dictionary<string, uint> MyTallies = new Dictionary<string, uint>();
那么什么是使这个线程安全的最佳选择?我看到它的方式,有3个(有点坏)选项:
>使类非静态;每个线程都必须创建一个新实例,并且可以为每个线程创建一个新的Dictionary.表现受到欢迎
>使用Dictionary锁定代码,并在锁定结束时清除Dictionary.性能大打出手.
>将字典传递给需要它的每个方法.然而,这会导致一个Dictionary被传入,只是为了一个大部分时间都不会被使用的可选功能,所以对于调用代码来说这似乎是一件奇怪的事情.由于调用代码每次都必须创建Dictionary实例,因此性能也会受到影响.
那么这里我最好的选择是什么,还是有其他更好的选择我还没有想过?
编辑:一个简单的用例:
internal static class HtmlFormatter {
private static readonly Dictionary<string, uint> MyTallies = new Dictionary<string, uint>();
internal static string RenderHtml(string markdown) {
string outputHtml = "";
// (process markdown and render to HTML)
// (found a heading that requires a unique ID)
var id = generatedId;
string unique = "";
if (MyTallies.ContainsKey(id)) {
// Already exists; suffix "-x" where x is count of duplicate IDs
unique = "-" + ++MyTallies[id];
}
else {
MyTallies[id] = 0;
}
id += unique;
// (append id string to HTML output and continue processing)
return outputHtml;
}
}
解决方法:
有关某些线程安全集合的概述,请参见this
内容总结
以上是互联网集市为您收集整理的c# – 在静态类中使字典安全吗?全部内容,希望文章能够帮你解决c# – 在静态类中使字典安全吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。