Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这里不需要考虑参数。@BoppityBop如果变量是数值的,则更有理由使用绑定变量/参数化查询。如果您试图将它们合并为字符串,它们首先会转换为字符串。然后由SQL Server解析回来。您正在添加相当于ToString()/Parse()的负载,同时也增加_C#_.net_Oracle_Oracle12c_Devart - Fatal编程技术网

C# 这里不需要考虑参数。@BoppityBop如果变量是数值的,则更有理由使用绑定变量/参数化查询。如果您试图将它们合并为字符串,它们首先会转换为字符串。然后由SQL Server解析回来。您正在添加相当于ToString()/Parse()的负载,同时也增加

C# 这里不需要考虑参数。@BoppityBop如果变量是数值的,则更有理由使用绑定变量/参数化查询。如果您试图将它们合并为字符串,它们首先会转换为字符串。然后由SQL Server解析回来。您正在添加相当于ToString()/Parse()的负载,同时也增加,c#,.net,oracle,oracle12c,devart,C#,.net,Oracle,Oracle12c,Devart,这里不需要考虑参数。@BoppityBop如果变量是数值的,则更有理由使用绑定变量/参数化查询。如果您试图将它们合并为字符串,它们首先会转换为字符串。然后由SQL Server解析回来。您正在添加相当于ToString()/Parse()的负载,同时也增加了发送到服务器的数据总量(字符串很快会比整数值大)。我认为您在这里测量的东西不对。这里可能只完成了一秒钟的实际数据库工作—为什么应用程序需要一分钟?(应用程序是否为每行创建新连接,并一次一行发送数据?)此外,这看起来像是一个串行测试。我可以想象


这里不需要考虑参数。@BoppityBop如果变量是数值的,则更有理由使用绑定变量/参数化查询。如果您试图将它们合并为字符串,它们首先会转换为字符串。然后由SQL Server解析回来。您正在添加相当于ToString()/Parse()的负载,同时也增加了发送到服务器的数据总量(字符串很快会比整数值大)。我认为您在这里测量的东西不对。这里可能只完成了一秒钟的实际数据库工作—为什么应用程序需要一分钟?(应用程序是否为每行创建新连接,并一次一行发送数据?)此外,这看起来像是一个串行测试。我可以想象,您的应用程序将有用户同时访问数据库。这就是可以获得巨大收益的地方。这是我的小组不久前制作的关于这个主题的视频。。。
update x set a = 0 where id = 100

vs 

update x set a = :a where id = :id

-- Create simple table with one record.
create table x(id number, a number);
insert into x values(100, 0);
commit;


-- 10,000 concatenated UPDATES - 5 seconds.
begin
    for i in 1 .. 10000 loop
        execute immediate 'update x set a = '||i||' where id = 100';
    end loop;
end;
/


-- 10,000 bind variable UPDATES - 0.3 seconds.
-- (Execute immediate is used here keep this test similar to above.)
begin
    for i in 1 .. 10000 loop
        execute immediate 'update x set a = :i where id = 100' using i;
    end loop;
end;
/
Inline vars: 00:01:09.7444764
Bound  vars: 00:01:05.4454827
static void Main(string[] args)
{
    var LEN = 30000;
    var cmd = new OracleCommand();
    var sql = "update some_table set progress={0} where id=100";
    var rnd = new Random((int)DateTime.Now.Ticks);

    //

    var sw = new Stopwatch();
    sw.Start();

    for (int i = 0; i < LEN; i++)
    {
        using(var cnn = new OracleConnection("xxx"))
        {
            sql = string.Format(sql, rnd.Next());
            cmd.CommandText = sql;
            cmd.Connection = cnn;

            cnn.Open();
            cmd.ExecuteNonQuery();
        }
    }

    sw.Stop();

    Console.WriteLine("Inline vars: {0}", sw.Elapsed);

    //

    sw.Restart();

    sql = "update tm_fnet set progress=:p where id=:i";

    for (int i = 0; i < LEN; i++)
    {
        using (var cnn = new OracleConnection("xxx"))
        {
            cmd.CommandText = sql;
            cmd.Connection = cnn;
                        cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("i", 100);
            cmd.Parameters.AddWithValue("p", rnd.Next());

            cnn.Open();
            cmd.ExecuteNonQuery();
        }
    }

    sw.Stop();

    Console.WriteLine("Bound vars: {0}", sw.Elapsed);

    //

    Console.ReadKey(false);
}