我有一个500000随机生成的Tuple<long,long,string>对象列表,我在其上执行一个简单的"之间"搜索:
var data = new List<Tuple<long,long,string>>(500000);
...
var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x);
Run Code Online (Sandbox Code Playgroud)
当我生成随机数组并运行我的搜索100个随机生成的值时x,搜索在大约四秒内完成.知道了的伟大奇迹的整理确实给搜索,但是,我决定把我的排序数据-首先Item1,然后Item2,最后由Item3运行我的100次的搜索之前- .我期望排序版本由于分支预测而执行得更快一些:我的想法是,一旦我们达到这一点Item1 == x,所有进一步检查t.Item1 <= x将正确地预测分支为"不接受",加快了尾部的速度.搜索.令我惊讶的是,搜索在排序的阵列上花了两倍的时间!
我尝试切换运行实验的顺序,并为随机数生成器使用不同的种子,但效果是一样的:在未排序的数组中搜索的速度几乎是同一数组中搜索的两倍,但是排序!
有没有人对这种奇怪的效果有一个很好的解释?我的测试的源代码如下; 我使用的是.NET 4.0.
private const int TotalCount = 500000;
private const int TotalQueries = 100;
private static long NextLong(Random r) {
var data = new byte[8];
r.NextBytes(data);
return BitConverter.ToInt64(data, 0);
}
private class TupleComparer : IComparer<Tuple<long,long,string>> …Run Code Online (Sandbox Code Playgroud) 我有一个课程如下:
public class Tag {
public Int32 Id { get; set; }
public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有两个标签列表:
List<Tag> tags1;
List<Tag> tags2;
Run Code Online (Sandbox Code Playgroud)
我使用LINQ的select来获取每个标签列表的ID.然后:
List<Int32> ids1 = new List<Int32> { 1, 2, 3, 4 };
List<Int32> ids2 = new List<Int32> { 1, 2, 3, 4 };
List<Int32> ids3 = new List<Int32> { 2, 1, 3, 4 };
List<Int32> ids4 = new List<Int32> { 1, 2, 3, 5 };
List<Int32> ids5 = new List<Int32> { 1, 1, …Run Code Online (Sandbox Code Playgroud) 使用异步调用时,我遇到了严重的SQL性能问题.我创建了一个小案例来证明这个问题.
我在SQL Server 2016上创建了一个数据库,它驻留在我们的LAN中(因此不是localDB).
在该数据库中,我有一个WorkingCopy包含2列的表:
Id (nvarchar(255, PK))
Value (nvarchar(max))
Run Code Online (Sandbox Code Playgroud)
DDL
CREATE TABLE [dbo].[Workingcopy]
(
[Id] [nvarchar](255) NOT NULL,
[Value] [nvarchar](max) NULL,
CONSTRAINT [PK_Workingcopy]
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
在该表中,我插入了一条记录(id='PerfUnitTest',Value是一个1.5mb的字符串(一个较大的JSON数据集的zip)).
现在,如果我在SSMS中执行查询:
SELECT [Value]
FROM [Workingcopy]
WHERE id = 'perfunittest'
Run Code Online (Sandbox Code Playgroud)
我立即得到结果,我在SQL Servre Profiler中看到执行时间大约是20毫秒.一切正常.
使用plain从.NET(4.6)代码执行查询时SqlConnection:
// at this point, the connection …Run Code Online (Sandbox Code Playgroud) 我发现智能指针比原始指针更舒服.那么总是使用智能指针是一个好主意吗?(请注意,我来自Java背景,因此不太喜欢显式内存管理的想法.所以除非智能指针存在一些严重的性能问题,否则我想坚持使用它们.)
注意:虽然我来自Java背景,但我非常了解智能指针的实现和RAII的概念.因此,在发布答案时,您可以将这些知识视为我的理所当然.我几乎到处都使用静态分配,只在必要时才使用指针.我的问题仅仅是:我是否可以使用智能指针代替原始指针?
为什么catch(Exception)几乎总是一个坏主意?
我有一个存储优惠券/折扣的表,我想使用coupon_code列作为主键,这是一个VARCHAR.
我的理由是,每个优惠券都有一个唯一的代码,我将运行的唯一命令是 SELECT ... FROM ... WHERE coupon_code='..'
我不会进行任何连接或索引,并且我没有看到此表中有超过几百个条目.
在我看来,这将是好的,但我不知道是否有任何我缺少/没有考虑的事情.
我正在创建自己的自定义UITableViewCell用作原型单元的后端.在我的类中,我重写了initwithstyle:reuseIdentifier:方法来进行一些自定义初始化,但我的初始化程序没有被调用.我在其内部的第一行有一个断点,以及一个断点dequeueResusableCellWithIdentifier:.dequeueResusableCellWithIdentifier:调用该方法,它返回一个已启动的单元格,但未达到断点initwithstyle:reuseIdentifier:.任何帮助都会很棒.
当我无法再开始搜索时,我的Xcode进入了非功能状态:一旦按下⌘+F,Xcode就会挂着旋转的风车,并停止响应.一旦发生这种情况,我唯一的选择是强制退出并重新启动.
我尝试在工作区和项目目录中查找已保存的设置,但我想要删除的最近搜索选项似乎存储在其他位置.我知道我可以通过UI清除最近的搜索,但这需要启动搜索对话框,它会挂起Xcode.
我想将Xcode重置为原始状态.如何在不重新安装Xcode的情况下执行此操作?
考虑经典序列点示例:
i = i++;
Run Code Online (Sandbox Code Playgroud)
C和C++标准声明上述表达式的行为未定义,因为=运算符与序列点无关.
让我感到困惑的是,++优先级高于优先级=,基于优先级的上述表达式必须首先进行评估i++然后进行赋值.因此,如果我们开始i = 0,我们应该总是i = 0(或者i = 1,如果表达式i = ++i)结束而不是未定义的行为.我错过了什么?
为什么不stream.count()退货int?
我明白,我可以很容易地转换long成int铸造,
return (int) players.stream().filter(Player::isActive).count();
Run Code Online (Sandbox Code Playgroud)
但是为什么 java会stream.count()返回long而不是int?
c# ×3
.net ×2
c++ ×2
java ×2
async-await ×1
asynchronous ×1
c ×1
exception ×1
ios ×1
java-8 ×1
java-stream ×1
linq ×1
mysql ×1
performance ×1
primary-key ×1
sql ×1
sql-server ×1
uitableview ×1
unique ×1
varchar ×1
xcode ×1
xcode5 ×1