C# 在多线程应用程序中使用类变量是否不好?
我继承了一个需要多线程的项目。工作线程中使用了三个主要类 基类-具有类级别的SqlDataAdapter和DataTable。 继承的类1-使用继承的SqlDataAdapter和DataTable。 继承的类2-使用继承的SqlDataAdapter和DataTable 每件事都很正常,但我只有两个用户同时测试 让SqlDataAdapter和DataTable成为类级变量是个坏主意吗 更新 抱歉,这是SqlDataAdapter,不是SqlTableAdapter。语言是C#。SqlDataAdapter和DataTable来自System.Data.SqlClient命名空间 下面是一些基本类:C# 在多线程应用程序中使用类变量是否不好?,c#,multithreading,variables,C#,Multithreading,Variables,我继承了一个需要多线程的项目。工作线程中使用了三个主要类 基类-具有类级别的SqlDataAdapter和DataTable。 继承的类1-使用继承的SqlDataAdapter和DataTable。 继承的类2-使用继承的SqlDataAdapter和DataTable 每件事都很正常,但我只有两个用户同时测试 让SqlDataAdapter和DataTable成为类级变量是个坏主意吗 更新 抱歉,这是SqlDataAdapter,不是SqlTableAdapter。语言是C#。SqlData
public abstract class BaseSync
{
#region Variables
internal SqlDataAdapter stageDataAdapter;
internal DataTable stageDataTable;
#endregion //Variables
}
第二部分
还有一个所有派生类都使用的单例实用程序类。我不知道这是否会引起问题。看起来是这样的:
public class Utility
{
private static readonly Utility _utility= new Utility();
private Utility()
{ }
public static Utility GetUtility()
{
return _utility;
}
public int GetAutoNumber(string tablename, string fieldname, string siteId)
{
string _tablename = tablename;
string _fieldname = fieldname;
...
}
internal MissingInfo NormalizeRow(DataRow dataRow)
{
MissingInfo retVal = MissingInfo.None;
//Num
if (dataRow["Num"] == DBNull.Value)
{
retVal =MissingInfo.Num;
dataRow["Num"] = 1;
}
...
}
}
这取决于对象的访问级别。只要它们不是静态的(在VB.NET中共享)。只要每个线程都有自己的对象实例,就可以将它们放在对象中 您遇到的有趣情况是使用在所有实例中共享的静态成员
因此,它的长短是我们需要查看代码。这取决于对象的访问级别。只要它们不是静态的(在VB.NET中共享)。只要每个线程都有自己的对象实例,就可以将它们放在对象中 您遇到的有趣情况是使用在所有实例中共享的静态成员
因此,长话短说就是我们需要查看代码。让不同线程修改变量而不进行同步总是一个非常糟糕的主意
但你没有提到这是不是真的。如果你是线程,你需要计划和检查你在做什么 让不同线程修改变量而不进行同步总是一个非常糟糕的主意
但你没有提到这是不是真的。如果你是线程,你需要计划和检查你在做什么 > P>在多线程中共享非常量对象时,应始终考虑同步,否则有一天会被终止…
< P> >,如果你想使它成为类变量,那就好了,但是记住要为它做一些锁机制。
在多线程中共享非常量对象时,你应该总是考虑做同步,否则有一天你会搞砸的……
所以,如果你想把它变成一个类变量,那也没关系,但是记住要为它设置一些锁机制。关于变量的规则是,变量可能改变的地方越多,竞争条件的可能性就越大,特别是在应用程序发展的情况下 你的问题没有太多信息,所以很难给出具体的答案。类级变量(如果是公共的)通常可以被视为全局变量,因此可以从任何地方访问,从而增加了腐败的风险
一种可能的方法是隐藏这些字段,并通过类级函数提供访问。然后您可以做更多的事情,因为您已经创建了这些变量的特定访问点。您需要小心,以确保您从未向应用程序提供对该对象的直接和可变引用,这可能需要一些重写,但这会使您的程序更安全 关于变量的规则是,它们可能改变的地方越多,出现竞争条件的可能性就越大,尤其是在应用程序发展的情况下 你的问题没有太多信息,所以很难给出具体的答案。类级变量(如果是公共的)通常可以被视为全局变量,因此可以从任何地方访问,从而增加了腐败的风险
一种可能的方法是隐藏这些字段,并通过类级函数提供访问。然后您可以做更多的事情,因为您已经创建了这些变量的特定访问点。您需要小心,以确保您从未向应用程序提供对该对象的直接和可变引用,这可能需要一些重写,但这会使您的程序更安全 如果不了解线程安全或SQLTableAadaptor和DataTable,这是不可能的。@NitroxDM,也许只是我,但您在问题中提到您使用的语言了吗?SQLTableAdapter是VB.Net、C#或其他语言的一个特性吗?语言可能会对答案产生影响。如果不了解线程安全或SqlTableAAAdaptor和DataTable,就不可能这么说。@NitroxDM,也许只是我,但您在问题中提到您使用的语言了吗?SQLTableAdapter是VB.Net、C#或其他语言的一个特性吗?语言可能会对答案产生影响。