C# 如何更改这些代码以更快地执行

C# 如何更改这些代码以更快地执行,c#,C#,此代码工作正常,但执行时间太长。如何更改它们以加快执行速度?在没有任何测试数据或不知道您的类型的情况下,很难测试代码,但我会这样做: 我将创建一个类来反映我正在使用的类型,如下所示: for (int i = 0; i < clear_no7.Rows.Count; i++) { for (int j = 0; j < lst_cnacld.Rows.Count; j++) { if (lst_cnacld.Rows[j]["Code"].ToStri

此代码工作正常,但执行时间太长。如何更改它们以加快执行速度?

在没有任何测试数据或不知道您的类型的情况下,很难测试代码,但我会这样做:

我将创建一个类来反映我正在使用的类型,如下所示:

for (int i = 0; i < clear_no7.Rows.Count; i++)
{
    for (int j = 0; j < lst_cnacld.Rows.Count; j++)
    {
        if (lst_cnacld.Rows[j]["Code"].ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 10).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 100).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 1000).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
    }
}
public class TempType
{
    public  string Route { get; set; }
    public  int Code { get; set; }
}
然后,我将避免使用datatables,并提供一个类列表,如下所示:

for (int i = 0; i < clear_no7.Rows.Count; i++)
{
    for (int j = 0; j < lst_cnacld.Rows.Count; j++)
    {
        if (lst_cnacld.Rows[j]["Code"].ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 10).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 100).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
        else if ((Convert.ToInt32(lst_cnacld.Rows[j]["Code"]) / 1000).ToString() == clear_no7.Rows[i]["Code"].ToString())
        {
            clear_no7.Rows[i]["Route"] = lst_cnacld.Rows[j]["Route"];
        }
    }
}
public class TempType
{
    public  string Route { get; set; }
    public  int Code { get; set; }
}

您也有一些紧张的业务逻辑,但我会照原样说。

什么是clear\u no7?它是一个数据表吗?您需要向我们提供更多详细信息。这不是应该在代码审阅中完成的吗?我要做的第一件事是在for循环的开始处将lst_cnacld.Rows[j][code]和clear_no7.Rows[I][code]分配给变量。还有,你试过使用Parallel.For吗?@RuiJarimba。Parallel.For可以提高性能,但如果使用错误/在错误的位置,也可能降低性能。创建新的并行/线程所涉及的开销非常高。就我个人而言,我不认为平行。因为这是一个用来做这种光的东西的地方。我只在您有几项繁重的战斗任务需要很长时间才能完成时才使用它。@WynDiesel true,如果使用不当,可能会降低性能。在这个特殊的情况下很难说,如果DataTables是大的,它可能值得一试。虽然我不同意在使用特定类型的数据时,这个答案不考虑用表中的实际数据来填充这两个列表所需的时间。@史提夫,公平评论。我不知道他是如何填充我假设的dataTable的。