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小时。我们只能猜测瓶颈在哪里/内存被消耗,尤其是在没有看到所有代码的情况下。分析器将告诉您发生了什么,以及哪些代码区域需要注意。