基于C#互操作的应用程序在循环中变慢

问题描述

这可能有点奇怪。目前,我正在尝试测试一些代码,这些代码是使用Interop方法将大型文档从Microsoft Word传输到Microsoft Excel的。我的程序依靠从单词中读取单词并将其导入excel中的单元格。这些文档的长度可以有所不同,但有些文档却很长。我发现程序使用的循环总是非常好的开始,经过几千个单词和几百个单元,整个程序变慢了。例如,我能够在10分钟内浏览完本示例文档的四分之一,但整个文档要花几个小时才能完成。

我想我想知道的是这是我的循环中是否存在一个问题,该问题存储了导致速度变慢的不必要数据,或者这是Microsoft应用程序方面的问题?我尝试将单词作为整个段落而不是单个单词输入,并尝试输入单个字符,但都没有提供更快的选择。如果可能重新加载文件或从循环中退出会导致仓促,我将尝试下一个尝试,但是仅凭我的有限知识,我就感觉这是Microsoft方面的问题。

附加的是循环代码

for (int i = 1; i <= (docs.Words.Count); i++)
            {
                if (docs.Words[i].Text == "\r")
                {
                    if (i != 1 && docs.Words[i - 1].Text != "\r")
                    {
                        if (Math.Floor(count / 13) == 0)
                        {
                            count = count + 15;
                        }
                        wks.Cells[r,c].RowHeight = Math.Floor(count / 13) * 16; 
                        count = 0;
                        r++;
                        wks.Range[wks.Cells[r,1],wks.Cells[r,9]].Merge();
                    }
                }
                else if (docs.Words[i].Text == "\r\a")
                {
                    if (i != 1 && docs.Words[i - 1].Text == "\r\a")
                    {
                        if (Math.Floor(count/13) == 0)
                        {
                            count = count + 13;
                        }
                        wks.Cells[r,c].RowHeight = Math.Floor(count / 13) * 16; 
                        count = 0;
                        r++;
                        c = 1;
                        wks.Range[wks.Cells[r,9]].Merge();
                    }
                    else
                    {
                        wks.Range[wks.Cells[r,9]].Unmerge();
                        c++;
                    }
                }
                else
                {
                    try
                    {
                        wks.Cells[r,c].Value2 = wks.Cells[r,c].Value2 + docs.Words[i].Text;
                        Console.WriteLine((docs.Words.Count - count2).ToString());
                        count++;
                        count2++;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        continue;
                    }
                }
            }

感谢您提供的任何帮助。如果很快没有收到答案,我很可能会删除问题并继续使用较慢的选项。这不是灾难性的问题,而只是生存问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)