GVKun编程网logo

Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试

18

本篇文章给大家谈谈CoreData和sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试,同时本文还将给你拓展.net–使用DapperORM提高SQLite批量插入的性能、c#中

本篇文章给大家谈谈Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试,同时本文还将给你拓展.net – 使用Dapper ORM提高SQLite批量插入的性能、c#中list.FindAll与for循环的性能对比总结、dom4j,json,pattern 性能对比【原】、dotnet core各rpc组件的性能测试等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试

Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试

demo 和源码再此下载 :http://download.csdn.net/detail/hherima/5603797

使用ios 7和xcode5编译。











.net – 使用Dapper ORM提高SQLite批量插入的性能

.net – 使用Dapper ORM提高SQLite批量插入的性能

我正在使用一个桌面应用程序,它使用sqlite将数万行批量插入sqlite数据库.我想帮助优化批量插入性能.目前需要长达50秒的时间将60兆的数据插入数据库.

>我可以使用什么连接字符串参数来改进
性能?我应该更改缓冲区大小吗?这可能是通过一个
连接字符串参数?是否有任何其他连接字符串
参数提高性能?我当前的连接字符串是:

Data Source=Batch.db;Version=3;Pooling=True;Max Pool
Size=10;Synchronous=off;FailIfMissing=True;Journal Mode=Off;

>我正在使用Dapper ORM. (由StackOverflow的人员构建)是否有更快的方式批量插入到.net中的sqlite?
> System.Data.sqlite用于插入到sqlite中.如何获得改进的sqlite的特殊编译版本
性能? sqlite的一个版本比另一个版本好吗?目前
使用System.Data.sqlite从http://sqlite.phxsoftware.com
>目前,我在一个事务中包装插入以使它们更快(这是一个很好的改进).
>我一次插入一张表中,共17张.我可以在不同的线程并行化这个,使这更快吗?

当前业绩.
这是典型的吗我能做得更好吗

> 55,000行到19列的表:2.25秒插入(24k插入/秒)
> 10,000行到63列的表:2.74秒插入(3.7k /秒)

我喜欢sqlite,但我希望使它更快一些.目前使用XML序列化将对象保存到XML文件中比将其保存到sqlite数据库更快,所以我的老板问:为什么要切换到sqlite?还是应该使用MongoDB或其他对象数据库?

解决方法

所以我终于找到了使用.NET在sqlite中高性能批量插入的技巧.这个技巧将插入性能提高了4.1倍!我的总节省时间从27秒到6.6秒.哇!

本文解释了fastest way to do bulk inserts into SQLite.关键是重用相同的参数对象,但是要为每个记录插入,分配一个不同的值. .NET构建所有这些DbParameter对象的时候真的加起来了.例如,100k行和30列= 300万个必须创建的参数对象.相反,创建和重用只有30个参数对象要快得多.

新表演:

> 55,000行(19列).53秒= 100k插入/秒

internal const string PeakResultsInsert = @"INSERT INTO PeakResult values(@Id,@PeakID,@QuanPeakID,@ISTDRetentionTimeDiff)";

            var command = cnn.CreateCommand();
            command.CommandText = BatchConstants.PeakResultsInsert;

            string[] parameterNames = new[]
                                 {
                                   "@Id","@PeakID","@QuanPeakID","@ISTDRetentionTimeDiff"
                                  };

            DbParameter[] parameters = parameterNames.Select(pn =>
            {
                DbParameter parameter = command.CreateParameter();
                parameter.ParameterName = pn;
                command.Parameters.Add(parameter);
                return parameter;
            }).ToArray();

            foreach (var peakResult in peakResults)
            {
                parameters[0].Value = peakResult.Id;
                parameters[1].Value = peakResult.PeakID;
                parameters[2].Value = peakResult.QuanPeakID;
                parameters[3].Value = peakResult.ISTDRetentionTimeDiff;

                command.ExecuteNonQuery();
            }

最后我不能使用Dapper插入我的大桌子. (对于我的小桌子,我仍然使用Dapper).

注意,我发现的其他一些事情:

>我尝试使用多个线程将数据插入同一个数据库,这没有任何改进. (没有什么区别)>从System.Data.sqlite升级1.0.69到1.0.79. (没有影响我的表现,我可以看到)>我没有将类型分配给DbParameter,它似乎没有使性能差异.对于阅读,我无法改善Dapper的表现.

c#中list.FindAll与for循环的性能对比总结

c#中list.FindAll与for循环的性能对比总结

前言

最近在网上看到一篇文章,里面说到:List<T>.FindAll的效率竟然比for循环还差,下面是文章的截图:

以上就是baidu出来的一篇文章,让我惊诧不已,因为在AI模块我已经使用了很多FindAll。但是,上文的结论是真的吗?

我在上文代码基础上增加了多次测试的代码:

得到了如下结果:

.Net2.0, visual studio 执行1,1,10, 100,1000次:

.Net4.1, visual studio 执行1,1,10, 100,1000次:

Unity 先预处理再执行1000次:


Unity 先预处理再执行 10 次

Unity 先预处理再执行 1 次

我的测试程序表明:无论windows平台还是unity平台,List.FindAll的效率并非如前文所说“比for循环差五六十倍”。事实是,因为要初始化算法现场,进程第一次调用List.FindAll的耗时比for循环长五六十倍。但是,第一次之后的调用List.FindAll和for循环的性能差异是非常小的,可以忽略。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

您可能感兴趣的文章:
  • C#中Foreach循环遍历的本质与枚举器详解
  • C# 9.0新特性——扩展方法GetEnumerator支持foreach循环
  • C#中foreach循环对比for循环的优势和劣势
  • 浅谈C#中的for循环与foreach循环
  • C# for循环的经典案例集锦
  • C# winform循环播放多个视频
  • C#使用for循环移除HTML标记
  • c# for循环中创建线程执行问题

dom4j,json,pattern 性能对比【原】

dom4j,json,pattern 性能对比【原】

 报文大概 2000 字节,对比时为只取其中某个节点的值即可. 以下对比可知取少量节点时 pattern 性能是远大于 dom4j, 和 json 的, 但取大量的时候就不能这么以偏概全了.

dom4j 和 pattern 对比

事件:

从 / PACKET/HEAD/USERID 中取值

 

 

解析技术

单条 毫秒

多条 (1000 条) 毫秒

规则描写

代码可读性

dom4j

62

1048

pattern

3

163

 

 

 

 

 json 和 pattern 对比

事件:

从 PACKET.HEAD.USERID 中取值

 

 

解析技术

单条 毫秒

多条 (1000 条) 毫秒

规则描写

代码可读性

json

33

104

pattern

3

41

 

 

 

dotnet core各rpc组件的性能测试

dotnet core各rpc组件的性能测试

一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互。本文针对了dotnet core平台上的一些rpc组件进行性能测试,主要包括grpc,Orleans,xrpcnetx;其实平台下的rcp组件有很多,毕竟个人精力有限并没有一一添加到测试里面去;如果大家有兴趣可以参与进来https://github.com/IKende/dotnet-rpc-benchmark添加或优化测试代码并提交相关PR。

测试描述

为了更好的体现实际应用的情况,功能和网络环境都会多样性测试。调用测试是基于远程对象或接口的方式操作,操作方法包括简单和相对复杂的对象;测试的物理网络环境包括10Gb和普通网络1Gb.分别测试16,32,64,128和256等不同的请求并发并获取相关的总请求量和秒并发值。

测试工具

https://github.com/IKende/CodeBenchmarkDoc

测试物理环境

  • Client

    E3-1230v2 16g

  • Server

    E5-2670v2 32g

  • Network

    10Gb和1Gb

  • System

    Windows server

测试接口描述

public interface IGreeter
    {
        Task<HelloReply> SayHello(HelloRequest request);

        Task<User> Register(string name, string email, string password, string title, string city);

        Task<List<User>> List(int count);

    }

Hello

client request

SayHello(new HelloRequest { Name = "you" });

server response

return new HelloReply { Message = "Hello " + request.Name };

Register

client request

Greeter.Register("henryfan", "henryfan@msn.com", "12345678", "cxo", "guangzhou");

server response

return Task.FromResult(new User
            {
                Name = name,
                Email = email,
                Password = password,
                Title = title,
                City = city,
                CreateTime = DateTime.Now,
                ID= Guid.NewGuid().ToString("N")
            });

List

client request

Greeter.List(10);

server response

List<User> items = new List<User>(count);
            for(int i=0;i<count;i++)
            {
                var item = new User {
                    Name = "henryfan",
                    City = "guangzhou",
                    Email = "henryfan@msn.com",
                    Title = "cxo",
                    Password = "12345678",
                    ID = Guid.NewGuid().ToString("N"),
                    CreateTime = DateTime.Now
                };
                items.Add(item);
            }

测试总结

因为测试结果的图比较多,就在这里先总结了,有兴趣的朋友看完总结后再细看结果(本总结只针对现有测试的组件)。

  • orleans

    严格来说orleans的功能其实已经超出一rpc的范围,因为它有集群和Actor等应用集成;作为rpc来说它使用简单,基础性能也并不差,如果不考虑多平台交互只是在.net中使用我个人感觉它是首选。缺点没有提供多平台支持,如果需要更高密集的通讯调用在性能上还是相对差了些。

  • grpc

    作为http2.0和protobuf的结合体有着多平台的通用性,如果你的系统是多环境集成那这个绝对是不二的选择了;不过官方提供的.net实现性能并不出色可以说有点强差人意,官方建议使用.net core 3.0作为基础通讯支持,由于这次测试是基于.net core 2.2 因此测试结果比较差。在使用上也要吐槽一下,proto描述时不支持基础类型的返回值和参数,所有接口方法参数和返回都必须定义message.

  • xrpc

    高吞吐、易用和支持actor是它的特点,可以轻松应对Gb级以上带宽的rpc请求处理,缺点并不提供多语言平台支持……如果应用需要在服务间进行高密集的通讯交互可以考虑。

10Gb网络测试结果

16并发

32并发

64并发

128并发

 

 

256并发

1Gb网络测试结果

16并发

32并发

64并发

128并发

256并发

原文出处:https://www.cnblogs.com/smark/p/11451326.html

今天的关于Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试的分享已经结束,谢谢您的关注,如果想了解更多关于.net – 使用Dapper ORM提高SQLite批量插入的性能、c#中list.FindAll与for循环的性能对比总结、dom4j,json,pattern 性能对比【原】、dotnet core各rpc组件的性能测试的相关知识,请在本站进行查询。

本文标签: