c# - 在多线程应用程序中使用类变量不好吗?

标签 c# multithreading variables

我继承了一个需要多线程的项目。工作线程中使用了三个主要类。

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/

相关文章:

c# - 使用 System.Type 调用泛型方法

c# - 这些静态应用程序属性是否需要锁定?

c++ - C++中的变量和引用之间有什么区别?

c# - 无法找到 System.Web.Services

javascript - 将值从 JsonResult 方法传递到另一个方法

java - 避免在对象上使用同步锁

ios - 如何在另一个 .swift 文件中调用变量属性?

php - PHP中的严格模式

c# - LINQ 查询中的对象初始值设定项 - 是否可以重用计算数据?

Silverlight 跨线程 ui 更新问题