天道酬勤,学无止境

performance

将关系(规范化)数据表快速插入 SQL Server 2008 数据库(Fast insert relational(normalized) data tables into SQL Server 2008 database)

问题 我试图找到一种比我现在使用的 Linq 更好更快的方法来插入大量数据(~50K 行)。 我尝试写入本地数据库的数据位于序列化并从 WCF 接收的 ORM 映射数据列表中。 我热衷于使用 SqlBulkCopy,但问题是这些表是规范化的,实际上是具有一对多关系的序列或互连表。 这里有一些代码可以说明我的观点: foreach (var meeting in meetingsList) { int meetingId = dbAccess.InsertM(value1, value2...); foreach (var competition in meeting.COMPETITIONs) { int competitionId = dbAccess.InsertC(meetingid, value1, value2...); foreach(var competitor in competition.COMPETITORs) { int competitorId = dbAccess.InsertCO(comeetitionId, value1,....) // and so on } } } 其中 dbAccess.InsertMeeting 看起来像这样: // check if meeting exists int meetingId = GetMeeting

2021-09-20 19:03:25    分类:技术分享    c#   performance   linq-to-sql   sql-server-2008   sqlbulkcopy

自 v2.1.16 以来,r.js 依赖项跟踪是否明显变慢了? 还是只有我一个人?(Is r.js dependency tracing significantly slower since v2.1.16? Or is it just me?)

问题 我注意到与 2.1.15 及之前版本相比,r.js 版本 2.1.16/2.1.17 的构建时间显着增加。 额外的时间似乎是在“跟踪依赖项...”期间花费的。 我的build.js看起来像这样: ({ baseUrl: 'some/path/here', mainConfigFile: 'some/path/here', dir: 'some/path/here', modules: [ { name: "base" }, { name: "specific", exclude: ["base"] } ], findNestedDependencies: true, removeCombined: true, skipDirOptimize: true, optimize: "none" }) 在 Windows 环境中使用 node.js 运行此构建。 base和specific都有相当数量(但不荒谬)的嵌套依赖项( base在specific内部引用,因此被排除在外)。 在 2.1.15 中,这个构建在我的系统上需要±2 秒; 在 2.1.16/2.1.17 中需要±8 秒。 (请注意,所有丑化已被禁用,因此这不是一个因素) 我包括这个build.js以供参考,但我认为实际上并不是我的设置导致了速度变慢。 我尝试了许多(简单的)场景,它们在跟踪 2.1.16/2.1.17

2021-09-20 15:08:07    分类:技术分享    performance   requirejs   amd

火花流吞吐量监控(spark streaming throughput monitoring)

问题 有没有办法监控 Spark 集群的输入和输出吞吐量,以确保集群不会被传入的数据淹没和溢出? 就我而言,我在 AWS EC2 上设置了 Spark 集群,因此我考虑使用AWS CloudWatch来监控集群中每个节点的NetworkIn和NetworkOut 。 但是我的想法似乎不准确,网络并不意味着仅针对 Spark 的传入数据,也许还会计算其他一些数据。 是否有专门监控Spark 集群流数据状态的工具或方法? 或者我错过了 Spark 中已经有一个内置工具? 更新: Spark 1.4发布,4040 端口监控显着增强,图形化显示 回答1 Spark 有一个可配置的度量子系统。 默认情况下,它会在<driver>:<port>/metrics/json上发布已注册指标的 JSON 版本。 可以配置其他指标同步,如 ganglia、csv 文件或 JMX。 您将需要一些外部监控系统来定期收集指标并帮助您理解它。 (注意我们使用 Ganglia,但还有其他开源和商业选项) Spark Streaming 发布了几个可用于监控作业性能的指标。 要计算吞吐量,您可以结合: (lastReceivedBatch_processingEndTime-lastReceivedBatch_processingStartTime)/lastReceivedBatch_records

2021-09-20 14:59:08    分类:技术分享    performance   apache-spark   monitoring   spark-streaming   amazon-cloudwatch

页面性能:要从 CDN 加载多个库脚本还是将这些库合并并缩小到从服务器下载的一次?(Page performance: To load multiple library scripts from CDN or combine and minify those libraries into one download from server?)

问题 我了解从 CDN 加载像 jQuery 这样的大型公共库的优势。 但是较小的插件和库帮助程序(如 jQuery-ui 或 bootstrap 及其帮助程序)呢? 我的网站大约有 10-12 个。 我是否应该从 cdnjs 中单独选择它们并获得 CDN 的好处,但可能有更多的 HttpRequests。 或者我应该在本地压缩并将它们最小化为一个大插件文件并从我的服务器加载? 我在 SO 上看到这个问题被定义为“公共 CDN 上的多个库或我们 CDN 上的一个连接文件”,但是如果我们不订阅 CDN 怎么办? 回答1 使用 CDN 的好处是用户可以从最近的 CDN 获取文件。 此外,用户可能已经在他的计算机上拥有该文件,因此他不需要下载它。 创建包将最大限度地减少浏览器获取所有脚本/样式所需的 GET 数量。 我的建议是两者结合使用,因为浏览器一次只能下载 5 个文件。 因此,将 CDN 用于最常见的库(用户可能已经拥有它们),并将包用于您自己的文件(您的样式表或 JS 文件)。 检查开发人员工具中的网络选项卡,测量每种情况下所需的时间。 回答2 我绝对会建议您使用cdnjs和类似 CDN 中可以使用的内容。 大多数情况下,人们会将文件缓存起来,因此不会有额外的 HTTP 请求。 连接和放大您无法从 CDN 加载的所有内容将为您节省一些带宽并加快站点的加载时间。

2021-09-20 14:54:58    分类:技术分享    javascript   performance

从给定的列表中快速查找字典中的所有键(Finding all keys in a dictionary from a given list QUICKLY)

问题 我有一个(可能很大)字典和一个“可能”键的列表。 我想快速找到字典中哪些键具有匹配值。 我在这里和这里发现了很多关于单个字典值的讨论,但没有讨论速度或多个条目。 我提出了四种方法,对于三种效果最好的方法,我比较了下面不同样本量的速度 - 有更好的方法吗? 如果人们可以推荐明智的竞争者,我也会让他们接受下面的分析。 示例列表和字典的创建方式如下: import cProfile from random import randint length = 100000 listOfRandomInts = [randint(0,length*length/10-1) for x in range(length)] dictionaryOfRandomInts = {randint(0,length*length/10-1): "It's here" for x in range(length)} 方法 1: 'in'关键字: def way1(theList,theDict): resultsList = [] for listItem in theList: if listItem in theDict: resultsList.append(theDict[listItem]) return resultsList cProfile.run('way1

2021-09-20 14:31:17    分类:技术分享    python   performance   list   dictionary

我应该测试是否等于 1 或不等于 0?(Should I test if equal to 1 or not equal to 0?)

问题 前几天我在这里编码,写了几个 if 语句,其中的整数总是0或1 (实际上充当bool s)。 我问自己: 当测试为阳性结果时,哪个更好; 测试int == 1还是int != 0 ? 例如,给定一个 int n ,如果我想测试它是否为true ,我应该使用n == 1还是n != 0 ? 在速度、处理能力等方面有什么区别吗? 请忽略 int 可能大于/小于1 / 0的事实,这是无关紧要的,不会发生。 回答1 人类的大脑更好地处理不包含否定的语句,这使得“int == 1”更好。 回答2 这真的取决于。 如果您使用支持布尔值的语言,则应使用布尔值,而不是整数,即: if (value == false) 或者 if (value == true) 话虽如此,对于真正的布尔类型,只写是完全有效的(通常更好): if (!value) 或者 if (value) 在大多数现代语言中,几乎没有理由在布尔运算中使用整数。 话虽如此,如果您使用的语言不直接支持布尔值,那么这里的最佳选择实际上取决于您如何定义真假。 通常, false为 0,而true是 0 以外的任何值。在这种情况下,使用if (i == 0) (用于错误检查)和if (i != 0)用于真实检查。 如果您保证 0 和 1 是仅有的两个值,我可能会使用if (i == 1)因为否定更复杂,并且更有可能导致维护错误。

2021-09-20 12:55:39    分类:技术分享    performance   language-agnostic   coding-style

将 Java 中的数字填充到特定位数的最快方法(Fastest way to pad a number in Java to a certain number of digits)

问题 我正在尝试根据 DB 生成的序列号 (Y) 创建一个优化良好的代码位,以创建长度为 X 位数的数字(其中 X 是从运行时属性文件中读取的),然后将其用作文件夹- 保存文件时的名称。 到目前为止,我已经提出了三个想法,其中最快的是最后一个,但我很感激人们对此提出的任何建议...... 1) 实例化一个初始容量为 X 的 StringBuilder。附加 Y。当长度 < X 时,在 pos 零处插入一个零。 2) 实例化一个初始容量为 X 的 StringBuilder。当长度 < X 时,附加一个零。 根据 StringBuilder 值创建一个 DecimalFormat,然后在需要时格式化数字。 3) 创建一个 Math.pow( 10, X ) 的新 int 并添加 Y。在新数字上使用 String.valueOf() 然后 substring(1) 它。 第二个显然可以分为外环和内环部分。 那么,有什么提示吗? 使用 10,000 次迭代的 for 循环,我从前两个方法获得了相似的时间,而第三个方法大约快十倍。 这看起来正确吗? 完整的测试方法代码如下... // Setup test variables int numDigits = 9; int testNumber = 724; int numIterations = 10000; String

2021-09-20 11:16:24    分类:技术分享    java   performance   substring   stringbuilder   digits

C# 正在清除列表值类型仍然是 O(n) 操作?(C# Is clearing a List<T> with value types still an O(n) operation?)

问题 根据 Microsoft 文档,在 List 上调用 Clear() 是 O(n) 操作。 我猜这是因为如果列表要保存引用,则需要将它们清空。 我想知道如果列表具有值类型, Clear() 是否仍然是 O(n) 操作,因为容量没有改变。 重置索引指针和计数还不够吗? 我问这个是因为在当前的应用程序中,我们使用的列表在很短的时间内被清除了数十万次,并且想知道是否有不同的实现可以使它更快。 回答1 在 List.Clear 方法源代码中检查: Array.Clear(_items, 0, _size); _size = 0; Array.Clear 是一个外部方法,关于 Array.Clear 的 MSDN 声明是: 将数组中的元素范围设置为每个元素类型的默认值。 所以即使 T 是值类型,它仍然是 O(n) 操作。

2021-09-20 10:31:27    分类:技术分享    c#   arrays   performance   list

为什么我的基于 Java 的冒泡排序优于我的选择排序和我的插入排序(Why is my Java based Bubble Sort Outperforming my Selection Sort and my Insertion Sort)

问题 好的,所以我有一个冒泡排序、选择排序和插入排序的实现。 我正在使用 Java.Random 对象创建三个相同的十万个数字数组。 我依次将这些传递给每种排序方法。 我正在使用 System.nanotime 计时结果。 一些背景信息。 我为选择和插入排序所遵循的排序算法来自 Frank Carano 的“Java 3rd Ed 中的数据结构和抽象”冒泡排序,这让我很头疼。 下面我提供了一个执行所有这些的自包含类。 我没看到 Carano 的算法哪里出错了? 下面您将看到我正在计算基本操作的周期和完成时间。 在运行时,循环数的差异可以忽略不计。 对我来说,在查看完成时间时,气泡是第一,选择是第二,插入是第三。 这与传统智慧背道而驰。 为什么。 我做了一些相当愚蠢的事情吗? 顺便说一句,您应该能够在不进行任何更改的情况下编译和运行提供的代码。 import java.util.Random; /** * * Performs sorts on generic data, here using Integers. */ public class GenSorts { static int selectionCount = 0, bubbleCount = 0, insertionCount = 0;; //=======================================

2021-09-20 09:28:38    分类:技术分享    java   performance   sorting

为什么我会遇到长时间的非 GC 相关应用程序暂停?(Why am I experiencing long non-GC related application pauses?)

问题 我一直在 GC 日志中看到非常长的应用程序暂停,这些暂停似乎与垃圾收集无关。 该应用程序位于 16GB 堆上,分配的内存吞吐量非常大。 我知道 GC 日志会显示与 GC 不一定相关的暂停,这里似乎就是这种情况。 此外,在这些暂停期间,CPU 达到 100%,没有磁盘或内存 I/O,也没有日志记录活动(由于所有应用程序线程都被停止)。 关于什么可能导致这些长时间停顿的任何想法,或者关于如何追踪根本原因的任何建议? 这是日志中的相关片段(注意 151 秒的暂停): 2015-04-21T06:30:04.834-0500: 217179.483: [GC (Allocation Failure)2015-04-21T06:30:04.849-0500: 217179.483: [ParNew Desired survivor size 43614208 bytes, new threshold 6 (max 6) - age 1: 19876896 bytes, 19876896 total - age 2: 15903904 bytes, 35780800 total - age 3: 617120 bytes, 36397920 total - age 4: 34096 bytes, 36432016 total - age 5: 399896 bytes, 36831912

2021-09-20 08:28:05    分类:技术分享    java   performance   memory   garbage-collection