I inherited a project that needs to be mutithreaded. There is three major classes that get used in the worker threads.
BASE CLASS – has an class level SqlDataAdapter and DataTable.
INHERITED CLASS ONE – Uses the inherited SqlDataAdapter and DataTable.
INHERITED CLASS TWO – Uses the inherited SqlDataAdapter and DataTable.
Every thing seams to work, but I only have two users testing at the same time.
Is having the SqlDataAdapter and DataTable be class level variables a bad idea?
Update
Sorry it’s a SqlDataAdapter not a SqlTableAdapter. The language is C#. The SqlDataAdapter and DataTable are from the System.Data.SqlClient namespace.
Here is some of the base class:
public abstract class BaseSync
{
#region Variables
internal SqlDataAdapter stageDataAdapter;
internal DataTable stageDataTable;
#endregion //Variables
}
Part Two
There is also a singleton utility class that all the derived classes use. I don’t know if it will cause problems or not. It looks like this:
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;
}
...
}
}
This depends on the access level of the objects. As long as they are not Static (Shared in VB.NET). You should be fine having them in the object, as long as each thread, has its own instance of the object.
Where you come into interesting situations are with the static members that are shared across all instances.
So the long and short of it is that we would need to see the code.