当前位置:编程学习 > C#/ASP.NET >>

兄弟伙些看这段代码有没有可以优化的地方

当对考勤机导入数据量大时,相当慢,兄弟伙些看这段代码有没有可以优化的地方
 private void setvlauetojh_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            mMachineNumber = getjh(); if (mMachineNumber == 0) { return; }
            listBox2.Items.Clear();
            Int32[] arr2;
            string a = "";    
            object var;
            foreach (DataGridViewRow dgv in dataGridView4.SelectedRows)
            {
    
                if (dgv.Cells["ziwen"].Value.ToString().Trim() == "")
                {
                    listBox2.Items.Add("导入号[" + dgv.Cells["no"].Value.ToString() + "]没有指纹记录 ");
                    continue;
                }
                a = dgv.Cells["ziwen"].Value.ToString().Trim().Substring(0, dgv.Cells["ziwen"].Value.ToString().Trim().Length - 1);
                listBox2.Items.Add("正在设置登记号 [" + dgv.Cells["no"].Value.ToString() + "]");
                    if (a != "")
                    {
                        string[] arrtemp = a.Split('&');//这里的变量A比较大有四五千个字符来拆成数组
                        arr2 = new Int32[arrtemp.Length];
                        for (int i = 0; i < arrtemp.Length - 1; i++)
                        {
                            arr2[i] = Convert.ToInt32(arrtemp[i]);
                        }
                        a = "";                        
                        var = new System.Runtime.InteropServices.VariantWrapper(arr2);
                        if (!axFK542PET1.SetEnrollData(mMachineNumber, Convert.ToInt32(dgv.Cells["no"].Value), mMachineNumber, Convert.ToInt32(dgv.Cells["zino"].Value), Convert.ToInt32(dgv.Cells["qx"].Value), ref var, 0))
                        {
                            listBox2.Items.Add("导入登记号[" + dgv.Cells["no"].Value.ToString() + "]" + "指号[" + dgv.Cells["zino"].Value.ToString() + "]发生失败 ");
                            continue;
                        }
                        if (dgv.Cells["name"].Value.ToString().Trim()!="")
                        {
                            if (axFK542PET1.SetUserName(2, mMachineNumber, Convert.ToInt32(dgv.Cells["no"].Value), dgv.Cells["name"].Value.ToString()) == false)
                            {
                                listBox2.Items.Add("导入姓名[" + dgv.Cells["name"].Value.ToString() + "]" + "指号[" + dgv.Cells["zino"].Value.ToString() + "]发生失败 ");
                                continue;
                            }
                        }
                    }
                    listBox2.SelectedIndex = listBox2.Items.Count - 1;
            }
            listBox2.Items.Add("导入完成 ");
            this.Cursor = Cursors.Default;
  
        } --------------------编程问答-------------------- foreach (DataGridViewRow dgv in dataGridView4.SelectedRows) 

    // 中间的处理可以启动多个线程来并发处理,一次处理多条数据。线程数不宜过多
} --------------------编程问答-------------------- 同意楼上的说法. --------------------编程问答-------------------- 楼主问这问题,可能是碰到了什么问题,不妨详细说说 --------------------编程问答-------------------- 因为可能有时导有上千条指纹记录,所以很慢,可能要半个小时左右,客户无法接受1481726554&1551195742&1347506787&1431787359&1533483336&1275940431&1481847757&1548013559&1617622029&1684925376&1751132891&1819742746&1887119343&1685707008&2019638183&1952917779&270380409&68108357&135648866&202819203&269324870&68998342&135503249&201827980&808182162&757721496&556267873&640013565&673786411&741158447&539042339&606414375&-656811301&-589439265&-791555373&-724183337&-926299445&-858927409&-1061043517&-993671481&-117835013&-50462977&-252579085&-185207049&-387323157&-319951121&-522067229&-454695193&-1734763877&-1667391841&-1869507949&-1802135913&-2004252021&-1936879985&-2138996093&-2071624057&-1195787589&-1128415553&-1330531661&-1263159625&-1465275733&-1397903697&-1600019805&-1532647769&-792634603&1598840414&1515738455&1363499355&1162822217&1331642436&-1078018628&-1145390664&-2021227132&-2088599168&-1886483060&-1953855096&-1752132204&-1818406512&-1671332452&-1738186344&-535224860&-333636128&-535752212&-199944472&-402060556&-871559440&-1073675524&-1006303624&-130467260&-63095232&-265211188&-197839160&-399955244&-869453872&-1071569956&-1004198440&953802020&1021165856&550628652&617982248&952513844&875704624&-1471166354&-1474670746&-2065469564&143418539&391012976&1954979287&352386747&1794196919&798245034&643933355&7889623&1420916358&-1565525267&-686993126&-2125689365&436047489&-1544458966&321435209&-1467923220&-314872104&89746961&1788224669&-68310292&-678615382&-1560315266&1198443070&-1358609389&-908749188&1830651743&-1054919837&-1725518398&-610551950&-1508455118&-1872128469&669069289&1923878863&1807770059&1948616427&-1217840851&334707204&1959514684&1306187370&638247220&1582010889&-990702489&-979255949&-134116906&1553290541&85689753&1049244965&870116530&1393964076&809785597&-1932638260&833602992&1392690652&-1308996184&1250893389&-1992273674&2031773179&1931722294&1588732129&367833840&440548350&802834889&-925174747&-2125917354&-1429552602&299257493&1657804848&249820017&-220919224&-1889471860&617465217&-1591330953&-960548283&-1514557289&703255969&1785349441&-800643212&-1827216041&-869056995&1057226642&770876870&1253469319&1405968504&-556066317&-326487639&1039853213&-763954827&-525131075&2025651888&-1019716225&-2135104812&484005828&-1029328369&-1560020555&-74930668&2143025504&1835916270&2131255456&1093686312&100285963&1021103267&1907611921&-543011132&-492883398&313091994&-41396616&1939079907&1077211642&393773127&-1699210452&-1833403785&-390428494&455426528&1497396301&-864577524&981472934&-546116981&1749777481&1876848483&394128069&582046468&-1649085796&1205944726&-62578883&-1000835737&783503087&-624237699&-1198429602&-757216387&1545666946&-1890642827&151063433&-272627236&-1025879227&20155148&559114664&1968020908&-250397695&1092908266&1326857713&1140169326&-1991206705&-920700009&-681888434&-1551193666&-208803121&-2096085310&-363149296&-1397903697&-1600019805&-1532647769&1482250843&1549622879&1347506771&1414878807&1212762699&1280134735&1078018627&1145390663&2021227131&2088599167&1886483059&1953855095&1751738987&1819111023&1616994915&1684366951&404298267&471670303&269554195&336926231&134810123&202182159&66051&67438087&943274555&1010646591&808530483&875902519&673786411&741158447&539042339&606414375&-656811301&-589439265&-791555373&-724183337&-926299445&-858927409&-1061043517&-993671481&-117835013&-50462977&-252579085&-185207049&-387323157&-319951121&-522067229&-454695193&-1734763877&-1667391841&-1869507949&-1802135913&-2004252021&-1936879985&-2138996093&-2071624057&-1195787589&-1128415553&-1330531661&-1263159625&-1465275733&-1397903697&-1600019805&-1532647769&1482250843&1549622879&1347506771&1414878807&1212762699&1280134735&1078018627&1145390663&2021227131&2088599167&1886483059&1953855095&1751738987&1819111023&1616994915&1684366951&404298267&471670303&269554195&336926231&134810123&202182159&66051&67438087&943274555&1010646591&808530483&875902519&673786411&741158447&539042339&606414375&-656811301&-589439265&-791555373&-724183337&-926299445&-858927409&-1061043517&-993671481&-117835013&-50462977&-252579085&-185207049&-387323157&-319951121&-522067229&-454695193&-1734763877&-1667391841&-1869507949&-1802135913&-2004252021&-1936879985&-2138996093&-2071624057&-1195787589&-1128415553&-1330531661&-1263159625&-1465275733&-1397903697&-1600019805&-1532647769&1482250843&1549622879&1347506771&1414878807&1212762699&1280134735&1078018627&1145390663&2021227131&2088599167&1886483059&1953855095&1751738987&1819111023&1616994915&1684366951&404298267&471670303&269554195&336926231&134810123&202182159&66051&67438087&943274555&1010646591&808530483&875902519&673786411&741158447&539042339&606414375&-656811301&-589439265&-791555373&-724183337&-926299445&-858927409&-1061043517&-993671481&-117835013&-50462977&-252579085&-185207049&-387323157&-319951121&-522067229&-454695193&-1734763877&-1667391841&-1869507949&-1802135913&-2004252021&-1936879985&-2138996093&-2071624057&-1195787589&-1128415553&-1330531661&-1263159625&-1465275733&-1397903697&-1600019805&-1532647769&1482250843&1549622879&1347506771&1414878807&1212762699&1280134735&1078018627&1145390663&2021227131&2088599167&1886483059& --------------------编程问答-------------------- Thread[] threads = new Thread[5];//我多线程应该加在哪里,对线程不熟
foreach (DataGridViewRow dgv in dataGridView4.SelectedRows) 

    // 中间的处理可以启动多个线程来并发处理,一次处理多条数据。线程数不宜过多 
}
 foreach (DataGridViewRow dgv in dataGridView4.SelectedRows)
            {
                iii++;
                if (iii % every == 0)
                {
                    progressBar1.Value = iii / every;
                }
               
                if (dgv.Cells["ziwen"].Value.ToString().Trim() == "")
                {
                    listBox2.Items.Add("导入号[" + dgv.Cells["no"].Value.ToString() + "]没有指纹记录 ");
                    continue;
                }
                lsa = ""; no = ""; name = ""; qx = ""; zino = "";
                lsa = dgv.Cells["ziwen"].Value.ToString().Trim().Substring(0, dgv.Cells["ziwen"].Value.ToString().Trim().Length - 1);
                no = dgv.Cells["no"].Value.ToString();
                name = dgv.Cells["name"].Value.ToString();
                qx = dgv.Cells["qx"].Value.ToString();
                zino = dgv.Cells["zino"].Value.ToString();
                listBox2.Items.Add("正在设置登记号 [" + dgv.Cells["no"].Value.ToString() + "]");
                if (lsa != "")
                {
                    WriteDaTa(lsa,no,name,qx,zino);
                }
                listBox2.SelectedIndex = listBox2.Items.Count - 1;
            }
private void WriteDaTa(String a,string No,string Name,string Qx,string Zino)
        {
            lock (this)
            {
                object var;
                Int32[] arr2;
                string[] arrtemp = a.Split('&');
                arr2 = new Int32[arrtemp.Length];
                for (int i = 0; i < arrtemp.Length - 1; i++)
                {
                    arr2[i] = Convert.ToInt32(arrtemp[i]);
                }
                a = "";
                var = new System.Runtime.InteropServices.VariantWrapper(arr2);
                if (!axFK542PET1.SetEnrollData(mMachineNumber, Convert.ToInt32(No), mMachineNumber, Convert.ToInt32(Zino), Convert.ToInt32(Qx), ref var, 0))
                {
                    listBox2.Items.Add("导入登记号[" + No + "]" + "指号[" + Zino + "]发生失败 ");
                }
                if (Name != "")
                {
                    if (axFK542PET1.SetUserName(2, mMachineNumber, Convert.ToInt32(No), Name) == false)
                    {
                        listBox2.Items.Add("导入姓名[" + Name + "]" + "指号[" + Zino + "]发生失败 ");
                    }
                }
            }
 
        } --------------------编程问答--------------------  private void setvlauetojh_Click(object sender, EventArgs e)
        {

            mMachineNumber = getjh(); if (mMachineNumber == 0) { return; }
            listBox2.Items.Clear();

            string lsa = "", no = "", name = "", qx = "", zino = "";
           
            
            foreach (DataGridViewRow dgv in dataGridView4.SelectedRows)
            {

                if (dgv.Cells["ziwen"].Value.ToString().Trim() == "")
                {
                    listBox2.Items.Add("导入号[" + dgv.Cells["no"].Value.ToString() + "]没有指纹记录 ");
                    continue;
                }
                lsa = ""; no = ""; name = ""; qx = ""; zino = "";
                lsa = dgv.Cells["ziwen"].Value.ToString().Trim().Substring(0, dgv.Cells["ziwen"].Value.ToString().Trim().Length - 1);
                no = dgv.Cells["no"].Value.ToString();
                name = dgv.Cells["name"].Value.ToString();
                qx = dgv.Cells["qx"].Value.ToString();
                zino = dgv.Cells["zino"].Value.ToString();
                listBox2.Items.Add("正在设置登记号 [" + dgv.Cells["no"].Value.ToString() + "]");
                if (lsa != "")
                {
                  Thread thr;//这里用一个线程,但多线程怎么做,这是一行一行做,我想一次多行,早点完成
                    ParameterizedThreadStart delegated;
                    object oo = (object)dgv;
                    delegated = new ParameterizedThreadStart(WriteDaTa);
                    thr = new Thread(delegated);
                    thr.Start(oo);
                }
                listBox2.SelectedIndex = listBox2.Items.Count - 1;
            }
            axFK542PET1.EnableDevice(mMachineNumber, 1);
            listBox2.Items.Add("导入完成 ");

        }
      
            
            public void WriteDaTa(object tempdv)
            {
                lock (this)
                {
                    DataGridViewRow Dv=(DataGridViewRow)tempdv;
                    string a = "", No = "", Name = "", Qx = "", Zino = "";
                    a = Dv.Cells["ziwen"].Value.ToString().Trim().Substring(0, Dv.Cells["ziwen"].Value.ToString().Trim().Length - 1);
                    No = Dv.Cells["no"].Value.ToString();
                    Name = Dv.Cells["name"].Value.ToString();
                    Qx = Dv.Cells["qx"].Value.ToString();
                    Zino = Dv.Cells["zino"].Value.ToString();
                    object var;
                    Int32[] arr2;
                    string[] arrtemp = a.Split('&');
                    arr2 = new Int32[arrtemp.Length];
                    for (int i = 0; i < arrtemp.Length - 1; i++)
                    {
                        arr2[i] = Convert.ToInt32(arrtemp[i]);
                    }
                    a = "";
                    var = new System.Runtime.InteropServices.VariantWrapper(arr2);
                    if (!axFK542PET1.SetEnrollData(mMachineNumber, Convert.ToInt32(No), mMachineNumber, Convert.ToInt32(Zino), Convert.ToInt32(Qx), ref var, 0))
                    {
                        listBox2.Items.Add("导入登记号[" + No + "]" + "指号[" + Zino + "]发生失败 ");
                       
                    }
                    if (Name != "")
                    {
                        if (axFK542PET1.SetUserName(2, mMachineNumber, Convert.ToInt32(No), Name) == false)
                        {
                            listBox2.Items.Add("导入姓名[" + Name + "]" + "指号[" + Zino + "]发生失败 ");
                        }
                    }
                    
                }

            } --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,