Tag: 性能

等于(=)与LIKE

在使用SQL时,在WHERE子句中使用=而不是LIKE有什么好处? 没有任何特殊的操作符, LIKE和=是一样的,对吗?

在JOIN或WHERE内条件

在JOIN子句和WHERE子句之间join条件有什么区别(性能,最佳实践等)? 例如… — Condition in JOIN SELECT * FROM dbo.Customers AS CUS INNER JOIN dbo.Orders AS ORD ON CUS.CustomerID = ORD.CustomerID AND CUS.FirstName = 'John' — Condition in WHERE SELECT * FROM dbo.Customers AS CUS INNER JOIN dbo.Orders AS ORD ON CUS.CustomerID = ORD.CustomerID WHERE CUS.FirstName = 'John' 你喜欢哪个(也许是为什么)?

C ++标准是否要求iostream的性能很差,或者我只是处理一个糟糕的实现?

每当我提到C ++标准库iostream的性能下降时,我都会有一阵怀疑的感觉。 然而,我的profiler结果显示在iostream库代码中花费了大量的时间(完全编译器优化),并且从iostreams切换到特定于OS的I / O API和自定义缓冲区pipe理确实给了一个数量级的改进。 C ++标准库在做什么额外的工作,这是标准所要求的,在实践中是否有用? 还是做一些编译器提供与手动缓冲区pipe理相竞争的iostream的实现? 基准 为了让问题得以解决,我写了一些简短的程序来实现iostream的内部缓冲: 把二进制数据放入ostringstream http://ideone.com/2PPYw 把二进制数据放入char[]缓冲区http://ideone.com/Ni5ct 使用back_inserter http://ideone.com/Mj2Fi将二进制数据放入一个vector<char> 新 : vector<char>简单迭代器http://ideone.com/9iitv 新增function :将二进制数据直接放入stringbuf http://ideone.com/qc9QA 新 : vector<char>简单的迭代器加边界检查http://ideone.com/YyrKy 请注意, ostringstream和stringbuf版本运行较less,因为它们速度较慢。 在ideone上, ostringstream比std:copy + back_inserter + std::vector慢大约3倍,比memcpy慢大约15倍。 当我将我的真实应用程序切换到自定义缓冲时,这与之前和之后的分析感觉一致。 这些都是内存中的缓冲区,所以iostreams的缓慢不能归咎于慢速磁盘I / O,太多的冲洗,与stdio同步,或任何其他的事情人们用来原谅慢C ++标准库iostream的。 能够看到其他系统的基准testing以及常见实现的评论(如gcc的libc ++,Visual C ++,Intel C ++)以及标准要求的开销是多less。 这个testing的基本原理 许多人正确地指出,iostream更常用于格式化输出。 但是,它们也是二进制文件访问的C ++标准提供的唯一现代API。 但是,对内部缓冲进行性能testing的真正原因适用于典型的格式化I / O:如果iostream不能保持磁盘控制器提供的原始数据,那么当它们负责格式化时,它们如何保持可用? 基准时间 所有这些都是外部( k )循环的迭代。 […]

在.NET中比较两个字节数组

我怎么能做到这一点? 当然,我可以这样做: static bool ByteArrayCompare(byte[] a1, byte[] a2) { if (a1.Length != a2.Length) return false; for (int i=0; i<a1.Length; i++) if (a1[i]!=a2[i]) return false; return true; } 但是我正在寻找一个BCLfunction或一些高度优化的经过validation的方式来做到这一点。 java.util.Arrays.equals((sbyte[])(Array)a1, (sbyte[])(Array)a2); 很好地工作,但它看起来不会像x64一样工作。 请注意我的超快速答案。

INT和VARCHAR主键之间是否存在真正的性能差异?

在使用INT和VARCHAR作为MySQL的主键之间是否存在可衡量的性能差异? 我想使用VARCHAR作为引用列表的主键(比如美国,国家代码),同事不会把INT AUTO_INCREMENT作为所有表的主键。 我的论点, 这里详细说明的是,INT和VARCHAR之间的性能差异是可以忽略的,因为每个INT外键引用都需要一个JOIN来表示引用,VARCHAR键将直接显示信息。 那么,有没有人有这个特定用例的经验和与之相关的性能问题?

第n次斐波纳契数在次线性时间

有没有algorithm来计算次线性时间的第n个斐波纳契数?

在使用FileInputStream时,如何确定理想的缓冲区大小?

我有一个从文件中创buildMessageDigest(哈希)的方法,我需要对很多文件(> = 100,000)执行此操作。 我应该用多大的缓冲区来从文件中读取以最大化性能? 大多数人都熟悉基本代码(为了以防万一,我将在这里重复一遍): MessageDigest md = MessageDigest.getInstance( "SHA" ); FileInputStream ios = new FileInputStream( "myfile.bmp" ); byte[] buffer = new byte[4 * 1024]; // what should this value be? int read = 0; while( ( read = ios.read( buffer ) ) > 0 ) md.update( buffer, 0, read ); ios.close(); md.digest(); 什么是最大化吞吐量的缓冲区的理想大小? 我知道这是依赖于系统,我很确定它的操作系统,文件系统和硬盘驱动器依赖,也可能有其他硬件/软件混合。 […]

有很大的数据库文件的sqlite的性能特点是什么?

我知道sqlite在超大型的数据库文件中performance不佳,即使它们被支持(曾经有一个关于sqlite网站的评论,指出如果你需要大于1GB的文件大小,你可能要考虑使用企业rdbms。再也找不到了,可能与旧版本的sqlite有关)。 但是,为了我的目的,我想先了解一下在考虑其他解决scheme之前它究竟有多糟糕。 我正在谈论2 GB以上的千兆字节范围内的sqlite数据文件。 任何人有任何这方面的经验? 任何提示/想法?

EntityFramework中的ObjectSet包含多less个可用于保持性能?

我正在使用以下的LINQ查询我的个人资料页面: var userData = from u in db.Users .Include("UserSkills.Skill") .Include("UserIdeas.IdeaThings") .Include("UserInterests.Interest") .Include("UserMessengers.Messenger") .Include("UserFriends.User.UserSkills.Skill") .Include("UserFriends1.User1.UserSkills.Skill") .Include("UserFriends.User.UserIdeas") .Include("UserFriends1.User1.UserIdeas") where u.UserId == userId select u; 它有一个很长的对象图,并使用许多包括。 它现在运行的很完美,但是当网站有很多用户时,会不会影响性能呢? 我应该以其他方式做吗?

为什么.NET中的multidimensional array比正常数组慢?

编辑:我向大家道歉。 当我实际上打算说“multidimensional array”时,我使用了“锯齿状数组”这个术语(可以在下面的例子中看到)。 我很抱歉使用不正确的名字。 实际上,我发现参差不齐的数组要比multidimensional array快! 我已经添加了锯齿arrays的测量值。 我正在尝试使用一个 盘陀 今天的multidimensional array,当我注意到它的性能不像我所预期的那样。 使用一维数组和手动计算索引要比使用二维数组快得多(几乎是两倍)。 我用1024*1024数组写了一个testing(初始化为随机值),进行了1000次迭代,在我的机器上得到了以下结果: sum(double[], int): 2738 ms (100%) sum(double[,]): 5019 ms (183%) sum(double[][]): 2540 ms ( 93%) 这是我的testing代码: public static double sum(double[] d, int l1) { // assuming the array is rectangular double sum = 0; int l2 = d.Length / l1; for (int i […]