Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# 转换C中字符串列表中的字典#_C#_Linq_Lambda_Linq To Objects - Fatal编程技术网

C# 转换C中字符串列表中的字典#

C# 转换C中字符串列表中的字典#,c#,linq,lambda,linq-to-objects,C#,Linq,Lambda,Linq To Objects,我有以下代码: var parameters = new Dictionary<string, object>(); parameters.Add("param1", 100); parameters.Add("param2", "ABC"); parameters.Add("param3", 1.2); 。。。执行Sql AddParamWithValue…(这没关系,我可以做到…) 好的,我做了一个小测试,string.join工作得非常好: param = string.Jo

我有以下代码:

var parameters = new Dictionary<string, object>();
parameters.Add("param1", 100);
parameters.Add("param2", "ABC");
parameters.Add("param3", 1.2);
。。。执行Sql AddParamWithValue…(这没关系,我可以做到…)


好的,我做了一个小测试,string.join工作得非常好:

param = string.Join(",", parameters.Keys);
value = string.Join(",", parameters.Values);
以下是我的测试函数:

private static void RunLoopTester()
        {
            Console.WriteLine("Building dictionary...");
            var parameters = new Dictionary<string, string>();
            for(var i = 0;i< 10000;i++)
            {
                parameters.Add(string.Format("param{0}",i),string.Format("value{0}", i));
            }
            var stopWatch = new Stopwatch();
            Console.WriteLine("Using foreach statement...");
            stopWatch.Start();
            var param = string.Empty;
            var value = string.Empty;
            foreach(var k in parameters.Keys)
            {
                param += string.Format("{0}{1}", string.IsNullOrEmpty(param) ? string.Empty : ",", k);
                value += string.Format("{0}{1}", string.IsNullOrEmpty(value) ? string.Empty : ",", parameters[k]);

            }
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Using simple syntax...");
            param = string.Empty;
            value = string.Empty;
            stopWatch.Reset();
            stopWatch.Start();
            param = string.Join(",", parameters.Keys);
            value = string.Join(",", parameters.Values);
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.ReadLine();
        }
编辑:接受帖子。OP提到proc参数需要@param。这可以通过将其放入字典的键(更好)来完成,或者,如果不能,则可以替换:

param = string.Join(",", parameters.Keys);
与:


这会将时间增加到2毫秒。我尝试在可枚举的键上使用linq select,但这将时间增加到了4毫秒。因此,替换的性能更高。

好的,我做了一些测试,string.join工作得非常好:

param = string.Join(",", parameters.Keys);
value = string.Join(",", parameters.Values);
以下是我的测试函数:

private static void RunLoopTester()
        {
            Console.WriteLine("Building dictionary...");
            var parameters = new Dictionary<string, string>();
            for(var i = 0;i< 10000;i++)
            {
                parameters.Add(string.Format("param{0}",i),string.Format("value{0}", i));
            }
            var stopWatch = new Stopwatch();
            Console.WriteLine("Using foreach statement...");
            stopWatch.Start();
            var param = string.Empty;
            var value = string.Empty;
            foreach(var k in parameters.Keys)
            {
                param += string.Format("{0}{1}", string.IsNullOrEmpty(param) ? string.Empty : ",", k);
                value += string.Format("{0}{1}", string.IsNullOrEmpty(value) ? string.Empty : ",", parameters[k]);

            }
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Using simple syntax...");
            param = string.Empty;
            value = string.Empty;
            stopWatch.Reset();
            stopWatch.Start();
            param = string.Join(",", parameters.Keys);
            value = string.Join(",", parameters.Values);
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.ReadLine();
        }
编辑:接受帖子。OP提到proc参数需要@param。这可以通过将其放入字典的键(更好)来完成,或者,如果不能,则可以替换:

param = string.Join(",", parameters.Keys);
与:


这会将时间增加到2毫秒。我尝试在可枚举的键上使用linq select,但这将时间增加到了4毫秒。因此,替换的性能更高。

好的,我做了一些测试,string.join工作得非常好:

param = string.Join(",", parameters.Keys);
value = string.Join(",", parameters.Values);
以下是我的测试函数:

private static void RunLoopTester()
        {
            Console.WriteLine("Building dictionary...");
            var parameters = new Dictionary<string, string>();
            for(var i = 0;i< 10000;i++)
            {
                parameters.Add(string.Format("param{0}",i),string.Format("value{0}", i));
            }
            var stopWatch = new Stopwatch();
            Console.WriteLine("Using foreach statement...");
            stopWatch.Start();
            var param = string.Empty;
            var value = string.Empty;
            foreach(var k in parameters.Keys)
            {
                param += string.Format("{0}{1}", string.IsNullOrEmpty(param) ? string.Empty : ",", k);
                value += string.Format("{0}{1}", string.IsNullOrEmpty(value) ? string.Empty : ",", parameters[k]);

            }
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Using simple syntax...");
            param = string.Empty;
            value = string.Empty;
            stopWatch.Reset();
            stopWatch.Start();
            param = string.Join(",", parameters.Keys);
            value = string.Join(",", parameters.Values);
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.ReadLine();
        }
编辑:接受帖子。OP提到proc参数需要@param。这可以通过将其放入字典的键(更好)来完成,或者,如果不能,则可以替换:

param = string.Join(",", parameters.Keys);
与:


这会将时间增加到2毫秒。我尝试在可枚举的键上使用linq select,但这将时间增加到了4毫秒。因此,替换的性能更高。

好的,我做了一些测试,string.join工作得非常好:

param = string.Join(",", parameters.Keys);
value = string.Join(",", parameters.Values);
以下是我的测试函数:

private static void RunLoopTester()
        {
            Console.WriteLine("Building dictionary...");
            var parameters = new Dictionary<string, string>();
            for(var i = 0;i< 10000;i++)
            {
                parameters.Add(string.Format("param{0}",i),string.Format("value{0}", i));
            }
            var stopWatch = new Stopwatch();
            Console.WriteLine("Using foreach statement...");
            stopWatch.Start();
            var param = string.Empty;
            var value = string.Empty;
            foreach(var k in parameters.Keys)
            {
                param += string.Format("{0}{1}", string.IsNullOrEmpty(param) ? string.Empty : ",", k);
                value += string.Format("{0}{1}", string.IsNullOrEmpty(value) ? string.Empty : ",", parameters[k]);

            }
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.WriteLine("Using simple syntax...");
            param = string.Empty;
            value = string.Empty;
            stopWatch.Reset();
            stopWatch.Start();
            param = string.Join(",", parameters.Keys);
            value = string.Join(",", parameters.Values);
            stopWatch.Stop();
            Console.WriteLine("Elapsed Time: {0}", stopWatch.ElapsedMilliseconds);
            Console.ReadLine();
        }
编辑:接受帖子。OP提到proc参数需要@param。这可以通过将其放入字典的键(更好)来完成,或者,如果不能,则可以替换:

param = string.Join(",", parameters.Keys);
与:



这会将时间增加到2毫秒。我尝试在可枚举的键上使用linq select,但这将时间增加到了4毫秒。因此,替换的性能更高。

您为什么关心代码的性能?数据库的执行将占总时间的绝大部分。通常,一个好的老式for或foreach循环会被执行。哦,我明白了,所以这会有所不同。有趣的。。。对于字段,执行string.Join(“,”,parameters.Keys)非常简单。但是我不确定这些值……如果您必须运行它100万次,那么您应该使用批量插入,您将占用大量服务器资源,试图一次插入1行100万条记录。顺便说一句,我在Raspberry Pi 2上20分钟内批量插入了8600万条记录,在SQL Server上插入100万条记录不需要2.5小时。我们只能猜测瓶颈在哪里/内存被消耗,尤其是在没有看到所有代码的情况下。分析器将告诉您发生了什么,以及哪些代码区域需要注意。您为什么关心代码的性能?数据库的执行将占总时间的绝大部分。通常,一个好的老式for或foreach循环会被执行。哦,我明白了,所以这会有所不同。有趣的。。。对于字段,执行string.Join(“,”,parameters.Keys)非常简单。但是我不确定这些值……如果您必须运行它100万次,那么您应该使用批量插入,您将占用大量服务器资源,试图一次插入1行100万条记录。顺便说一句,我在Raspberry Pi 2上20分钟内批量插入了8600万条记录,在SQL Server上插入100万条记录不需要2.5小时。我们只能猜测瓶颈在哪里/内存被消耗,尤其是在没有看到所有代码的情况下。分析器将告诉您发生了什么,以及哪些代码区域需要注意。您为什么关心代码的性能?数据库的执行将占总时间的绝大部分。通常,一个好的老式for或foreach循环会被执行。哦,我明白了,所以这会有所不同。有趣的。。。对于字段,执行string.Join(“,”,parameters.Keys)非常简单。但是我不确定这些值……如果您必须运行它100万次,那么您应该使用批量插入,您将占用大量服务器资源,试图一次插入1行100万条记录。顺便说一句,我在Raspberry Pi 2上20分钟内批量插入了8600万条记录,在SQL Server上插入100万条记录不需要2.5小时。我们只能猜测瓶颈在哪里/内存被消耗,尤其是在没有看到所有代码的情况下。分析器将告诉您发生了什么,以及哪些代码区域需要注意。您为什么关心代码的性能?数据库的执行将占总时间的绝大部分。通常,一个好的老式for或foreach循环会被执行。哦,我明白了,所以这会有所不同。有趣的。。。对于字段,执行string.Join(“,”,parameters.Keys)非常简单。但是我不确定这些值……如果您必须运行它100万次,那么您应该使用批量插入,您将占用大量服务器资源,试图一次插入1行100万条记录。顺便说一句,我在Raspberry Pi 2上20分钟内批量插入了8600万条记录,在SQL Server上插入100万条记录不需要2.5小时。我们只能猜测瓶颈在哪里/内存被消耗,尤其是在没有看到所有代码的情况下。分析器将告诉您发生了什么,以及哪些代码区域需要注意。