加速c#中的查询生成器(stringconcat)

本文关键字:stringconcat 查询 加速 | 更新日期: 2023-09-27 18:06:23

我做了一个函数,构建一个查询插入到mysql。上传速度非常快,但插入更长的值需要更长的时间。有没有一种方法可以加速这样的函数?因为我知道循环中的循环会花费很多时间来处理大量的数据。

foreach (string[] st in dataToUpload)
{
    buildQuery += " ('";
    for (int i = 0; i < st.Length; i++)
    {
        buildQuery += st[i];
        if (i < st.Length - 1)
            buildQuery += "','";
    }
    buildQuery += "')";
    if (st != dataToUpload[dataToUpload.Count - 1])
        buildQuery += ",";
}         

这是我想建立的查询,例如;

string test = INSERT INTO test (test, test1, test2, test3) values
test = test + " " + buildquery;

所以test将是

 INSERT INTO test (test, test1, test2, test3) 
     values ("testvalue1", "testvalue2" , "testvalue3" , "testvalue4"), 
            ("testvalue1", "testvalue2" , "testvalue3" , "testvalue4"), 

我可以与INNODB和MYISAM一起工作,它在centos服务器上使用6700k处理器和32gb ram。

所以主要的问题是:我怎样才能使查询的构建更快?

加速c#中的查询生成器(stringconcat)

我建议使用StringBuilder,它从一开始就被初始化为正确的大小。这减少了对每个字符串追加的内存重新分配。

假设dataToUpload是一个List,你可以试试:

        // String Builder Initialization
        // Size is calculated by getting the length of all strings and add 3 for each (','). 
        // Additionally there are 6 chars for " ('" and "')," per array
        StringBuilder build = new StringBuilder(dataToUpload.Sum(data => data.Sum(s => s.Length) + data.Length * 3) + 6);
        foreach (string[] st in dataToUpload)
        {
            build.Append(" ('" + string.Join<string>("','", st) + "'),");
        }
        buildQuery = build.ToString().TrimEnd(',');

看来你的buildQueryString。试试StringBuilder吧。这可能是进行字符串连接的最佳方式。

感觉这里需要更多信息,但我想你正在构建这样的插入语句:

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

所以,也许在foreach中不做for的最好方法是将foreach中的字符串[]替换为具有正确值的字符串。像这样:

  var count = 0;
  foreach (string st in dataToUpload)
            {
                buildQuery += " ('" + st + "'") "
                if (count++!=0 )
                 buildQuery += ","
            }

可能是:

var count = dataToUpload.Count;
var i = 0;
foreach (string[] st in dataToUpload)
{
    buildQuery += " ('" + string.Join(",", st) + "')";
    if (i++ < count - 1)
        buildQuery += ",";
}

不要将st与dataToUpload的内容进行比较,而是使用索引变量来加快速度。和字符串。连接是连接字符串的好方法。