我们目前正在为我们的配对网站中的客户存储52个预定义问题的答案.
我们拥有超过3000万的独特用户,总结了52x30万行的最坏情况.在这52个问题中,有11个是必需的并且总是得到回答.
我们之前的解决方案是为每个问题打开一个答案表.此解决方案分发了我们的答案行,以便更快地插入/删除/更新 但它也给我们带来了非传统的编程,例如每次添加/更新问题时动态打开表格,或者如果永久销毁则删除答案表.
我们希望为我们的第三个版本提供更好的解决方案但是还没有达到目标.
任何其他想法,也许是更传统的方式来实现这一点的想法?
默认情况下,当通过多个线程访问时,非静态方法为每个线程都有自己的变量实例,因此如果它们不包含公共变量等,则会使它们成为线程安全的.
另一方面,静态方法中的变量在线程之间共享,默认情况下使它们非线程安全.
说,我有一个类,没有任何静态变量或方法.
public class Profile {
private ConcurrentDictionary<int, int> cache =
new ConcurrentDictionary<int, int>();
public AddToCache() {
}
public RemoveToCache() {
}
public DoSomethingThatShouldBeThreadSafe() {
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我从这个类创建了一个静态对象.
public static Profile objProfile = new Profile();
Run Code Online (Sandbox Code Playgroud)
然后,使用多个线程访问objProfile.
问题是,Profile类,AddToCache,RemoveFromCache和DoSomethingThatShouldBeThreadSafe的方法是否在通过objProfile使用时是否是线程安全的?它们的变量是否会在线程之间共享,即使它们不是静态的,因为类的整个实例都是静态的?