在线程安全方面,HashTable和Dictionary之间有什么区别吗?我没有看到任何......根据msdn,两者的定义如下: -
Hashtable是线程安全的,可供多个读取器线程和单个写入线程使用.当只有一个线程执行写(更新)操作时,它对多线程使用是线程安全的,如果编写器被序列化为Hashtable,则允许无锁读取.
只要未修改集合,Dictionary就可以同时支持多个读取器.即便如此,通过集合枚举本质上不是一个线程安全的过程.在枚举与写访问争用的极少数情况下,必须在整个枚举期间锁定该集合.要允许多个线程访问集合以进行读写,您必须实现自己的同步.
我有一个字符串用户设置,并希望在我的C#Windows应用程序启动期间选择具有相同名称的特定变量.
例如
我有一个名为UserSelectedInt的用户设置(字符串),当前设置为'MyTwo'.(请注意,我的变量实际上比整数更复杂,我只是用它们作为例子.)
public static int MyOne = 12345;
public static int MyTwo = 54321;
public static int MyThree = 33333;
public int myInt = SelectMyVariableUsing(MyApp.Settings.Default.UserSelectedInt)
Run Code Online (Sandbox Code Playgroud)
用户可能在上次关闭应用时选择了"MyTwo",因此这是我想在启动时选择的变量.我希望我有意义.
请有人告诉我如何实现这一目标?
谢谢
我需要一个快速查找函数,它将返回一个基于整数键的字符串,并执行反对查找(传入字符串,返回int).
我应该为此创建2个哈希表吗?
更新到Unity 4.5后,我收到了一个过时的警告:
警告CS0618:
UnityEngine.WWW.WWW(string, byte[], System.Collections.Hashtable)' is obsolete:不推荐使用此过载.使用带有Dictionary参数的那个.(CS0618)(Assembly-CSharp)
代码如下:
public class Request {
public string url;
public NetworkDelegate del;
public WWWForm form;
public byte[] bytes;
public Hashtable header;
// Constructors
public Request(string url, NetworkDelegate del) {
this.url = url;
this.del = del;
}
public Request(string url, NetworkDelegate del, WWWForm form) : this(url, del) {
this.form = form;
}
public Request(string url, NetworkDelegate del, byte[] bytes) : this(url, del) {
this.bytes = bytes;
}
public Request(string url, NetworkDelegate del, byte[] …Run Code Online (Sandbox Code Playgroud) 我刚刚了解到:
Dictionary<TKey,?TValue>Class的链接MSDN文章.GetHashCode()不为每个唯一字符串值提供唯一的散列码值.根据有关字符串类的相应MSDN文章,不同的字符串可以返回相同的哈希码.这让我想到,.NET中的字典(至少在使用字符串作为键时)容易受到键冲突的影响.
这种钥匙碰撞会发生什么?是否存在任何已知的唯一字符串值,实际发生碰撞?字典是否会在这些关键值上被打破?
另外:
注意:我不是指特定的.NET CLR,但如果重要,那么让我们来谈谈桌面的4.5.2 32位版本.
关于重复的说明:
可能重复:
为什么Dictionary优先于C#中的哈希表?
嗨,我注意到我们在C#中都有哈希表实现和字典实现.但是,哈希表不是实现字典的一种方式.那么,为什么同时提供?他们不做同样的事情.