我继承了一个需要多线程的项目。工作线程中使用了三个主要类。
BASE CLASS - 具有类级别的 SqlDataAdapter 和 DataTable。 INHERITED CLASS ONE - 使用继承的 SqlDataAdapter 和 DataTable。 INHERITED CLASS TWO - 使用继承的 SqlDataAdapter 和 DataTable。
每样东西都能正常工作,但我只有两个用户同时进行测试。
让 SqlDataAdapter 和 DataTable 成为类级变量是个坏主意吗?
更新 抱歉,它是 SqlDataAdapter 而不是 SqlTableAdapter。语言是C#。 SqlDataAdapter 和 DataTable 来自 System.Data.SqlClient 命名空间。
下面是一些基类:
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 中共享)。只要每个线程都有自己的对象实例,就可以将它们放在对象中。
您遇到有趣情况的地方是在所有实例之间共享的静态成员。
总而言之,我们需要查看代码。
关于c# - 在多线程应用程序中使用类变量不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808301/