小编Iam*_*mIC的帖子

在.Net中,如何使用intellisense提示装饰类?

我希望能够在实例化类或访问字段时使用intellisense显示的文本来装饰类和方法.

例如,我想提供使用说明.

我找不到合适的装饰.我该怎么做?

.net intellisense attributes decorator

3
推荐指数
1
解决办法
397
查看次数

SQL Server中覆盖和单个索引的重叠

我有一个关于SQL Server(或任何RDBMS)索引的最佳实践的问题.请看下表:

ProfileID int
Text      nvarchar(50)
Run Code Online (Sandbox Code Playgroud)

ProfileID加入一张Profile桌子.每个配置文件都Text必须是唯一的.因此,我在两个列上都放置了一个主要封面键.精细.

但是,我也希望能够通过查询上表ProfileID.所以我也提了一个索引ProfileID.

这意味着我有一个重叠索引.我不知道这是否完全浪费,因为已经有一个封面索引,或者它是否正确,因为封面索引将是两列的散列(或者我是否误解了封面索引)?

编辑:

我按顺序创建了索引(ProfileID, Text).如果,为了论证的缘故,有3列A,B和C,它们都覆盖了所有3的覆盖索引.如果我们查询"A"或"A,B和C",它只会受益,但不会"B",或"C",或"B和C"?

sql-server indexing covering-index

3
推荐指数
1
解决办法
475
查看次数

存储过程和OPTIMIZE FOR UNKNOWN

我已经阅读了SQL Server 2008 OPTIMIZE FOR UNKNOWN查询提示.我明白它是如何工作的.

不过,我有个问题在那里,并使用它.它不能在UDF中指定.它可以在存储过程中指定.但是,这篇 MSDN博客文章陈述如下:

4.将查询移入存储过程可以将其置于单独的过程上下文中,并且可以是优化器可以看到该值的好方法(注意:这也适用于SQL 2000)

在我看来,传递给存储过程的任何参数都将被"嗅探",从而帮助SQL Server编译最佳执行计划.这意味着将重新访问/重新编译缓存的计划(不确定该机制).然而,这是令人困惑的,因为它否定了OPTIMIZE FOR UNKNOWN的全部需求.

关于查询提示的MSDN文章没有涵盖我的问题.

有人可以为我解答这个问题,理想情况下是指向微软的一些东西来解决这个问题.谢谢.

sql-server stored-procedures query-hints optimizer-hints

3
推荐指数
1
解决办法
3834
查看次数

PostgreSQL和SQL Server btree存储基础问题

我知道SQL Server可以在聚簇索引中以叶级别存储行的数据.我相信PostgreSQL不会这样做.如果是这样,它的存储范例是什么?

我的主要问题如下.考虑以下设计和数据(以T-SQL显示):

CREATE TABLE dbo.Tree
    (
    [Key] int NOT NULL,
    ID int NOT NULL
    ) ON [PRIMARY]
GO
ALTER TABLE dbo.Tree ADD CONSTRAINT
    PK_Tree PRIMARY KEY CLUSTERED 
    (
    [Key],
    ID
    ) WITH (...) ON [PRIMARY]

INSERT INTO TREE ([Key], ID) VALUES (1, 1), (1, 2), (1, 3), (1, 4).
Run Code Online (Sandbox Code Playgroud)

由于这是一个以两列作为PK的btree,我更正确地说"[Key] = 1"只存储一次,而"ID = [1,2,3,4]"将是单个值btree,而每个sé都没有叶值,因为没有行列不属于PK?

如何在PostgreSQL中工作?

database sql-server postgresql b-tree

3
推荐指数
1
解决办法
2430
查看次数

PostgreSQL - 查询HSTORE值的GIN索引

我有以下构造函数(作为测试):

CREATE TABLE product (id BIGSERIAL PRIMARY KEY, ext hstore);
CREATE INDEX ix_product_ext ON product USING GIN(ext);

INSERT
INTO    product (id, ext)
SELECT  id, ('size=>' || CEILING(10 + RANDOM() * 90) || ',mass=>' || CEILING(10 + RANDOM() * 90))::hstore
FROM    generate_series(1, 100000) id;
Run Code Online (Sandbox Code Playgroud)

我有以下查询,它可以正常工作:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  (ext->'size')::INT >= 41
    AND    (ext->'mass')::INT <= 20
) T
Run Code Online (Sandbox Code Playgroud)

但我相信正确的方法是使用@>运算符.我有以下内容,但它给出了语法错误:

SELECT  COUNT(id)
FROM    (
    SELECT  id
    FROM    product
    WHERE  ext @> 'size>=41,mass<=20'
) T
Run Code Online (Sandbox Code Playgroud)

我该怎么写呢?

sql postgresql gwt-gin

3
推荐指数
1
解决办法
4481
查看次数

C#中的谓词问题

我有以下方法定义(EDITED删除冗余通用):

public static T SearchAgaistValues<T>(Dictionary<string, string> input, 
string key, List<T> values, Predicate<T> match, out string[] cmdParams)
Run Code Online (Sandbox Code Playgroud)

我的简化要求如下.我需要寻找inputkey,如果找到,看看它的值出现在values.但是,它values是通用的(显然包含我需要匹配的字符串).因此,我看到它的方式,我必须传递谓词方法来执行匹配.

但是,Predicate<T>我所看到的每个例子都有一个硬编码的比较器.我需要将找到的key's值与每个项目进行比较values.但是,我无法传递这些值.

我无法看到如何使用基于委托的匹配方法在foreach循环之外执行此操作.

我在这里错过了什么吗?

.net c# delegates predicates c#-4.0

3
推荐指数
1
解决办法
151
查看次数

C#中的代表表现异常差

我较早前发布了有关在C#中动态编​​译代码的问题,答案导致了另一个问题。

一种建议是,我使用委托,我尝试了这些委托,然后使它们运作良好。但是,他们的替补速度比直接通话慢8.4倍,这没有任何意义。

此代码有什么问题?

我的结果是.Net 4.0、64位,直接运行exe:62、514、530

public static int Execute(int i) { return i * 2; }

private void button30_Click(object sender, EventArgs e)
{
    CSharpCodeProvider foo = new CSharpCodeProvider();

    var res = foo.CompileAssemblyFromSource(
        new System.CodeDom.Compiler.CompilerParameters()
        {
            GenerateInMemory = true,
            CompilerOptions = @"/optimize",                    
        },
        @"public class FooClass { public static int Execute(int i) { return i * 2; }}"
    );

    var type = res.CompiledAssembly.GetType("FooClass");
    var obj = Activator.CreateInstance(type);
    var method = type.GetMethod("Execute");
    int i = 0, t1 = Environment.TickCount, t2; …
Run Code Online (Sandbox Code Playgroud)

.net c# performance delegates

3
推荐指数
1
解决办法
4529
查看次数

QWORD使用SIMD SSE ... AVX将连续的7位与字节对齐进行混洗

我想知道在任何SIMD系列指令中是否可以使用以下内容.

我有一个带有63位有效位的qword输入(从不为负).从LSB开始的每个连续7位是随机对齐到一个字节,左填充为1(除了最重要的非零字节).为了说明,为了清楚起见,我会使用字母.

结果只有有效字节,因此大小为0-9,转换为字节数组.

In:         0|kjihgfe|dcbaZYX|WVUTSRQ|PONMLKJ|IHGFEDC|BAzyxwv|utsrqpo|nmlkjih|gfedcba
Out: 0kjihgfe|1dcbaZYX|1WVUTSRQ|1PONMLKJ|1IHGFEDC|1BAzyxwv|1utsrqpo|1nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)

大小= 9

In:  00|nmlkjih|gfedcba
Out: |0nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)

大小= 2

我知道填充是分开的.洗牌调整是我的问题.这可能吗?

编辑2

这是我更新的代码.在单线程Core 2 Duo 2 GHz,64位上获得持续长度输入的持续46 M /秒.

private static int DecodeIS8(long j, ref byte[] result)
{
    if (j <= 0)
    {
        return 0;
    }

    int size;

    // neater code: gives something to break out of
    while (true)
    {
        result[0] = (byte)((j & 0x7F) | 0x80);
        size = 0;
        j >>= 7;

        if (j == 0) break;

        result[1] = (byte)((j & 0x7F) | 0x80); …
Run Code Online (Sandbox Code Playgroud)

x86 sse bit-manipulation simd avx

3
推荐指数
1
解决办法
692
查看次数

x64 代码中的对齐问题,Free Pascal

如果针对 32 位进行编译(使用适用的寄存器重命名),下面的代码可以正常工作。但它在执行时会抛出错误(并且“警告:目标文件“project1.o”包含到符号“.data.n_tc_p$project1_orbitkeyheader64$int64$longint$$int64_shufidx”的32位绝对重定位。”编译时)。

function SwapBytes64(const Val: Int64): Int64;
{$A 16}
const
  SHUFIDX : array [0..1] of Int64 = ($0001020304050607, 0);
begin
asm
  movq          xmm0, rcx
  pshufb        xmm0, SHUFIDX    // throws
  movq          rax, xmm0
end;
end;
Run Code Online (Sandbox Code Playgroud)

我该如何纠正这个问题(最好是对齐常数)。

编辑 我也尝试使用 movdqu。

答案 这是@Jester 答案的结果:

function SwapBytes64(const Val: Int64): Int64;
const
  SHUFIDX : array [0..1] of Int64 = ($0001020304050607, 0);
begin
asm
  movq          xmm0, rcx
  movdqu        xmm1, [rip+SHUFIDX]
  pshufb        xmm0, xmm1
  movq          rax, xmm0
end;
end;
Run Code Online (Sandbox Code Playgroud)

这也有效,但没有明显的速度优势:

function SwapBytes64(const Val: Int64): Int64;
const …
Run Code Online (Sandbox Code Playgroud)

assembly freepascal lazarus

3
推荐指数
1
解决办法
820
查看次数

将两个64位整数分别加载到下部和上部xmm

将RDX,R8中的两个long移动到XMM0中的最简单的方法是什么,其中RDX移动到较低的64位,R8移动到较高的64位?

MOVQ仅设置较低,0设置为较高.

我只限于SSSE3.

assembly sse cpu-registers

3
推荐指数
1
解决办法
436
查看次数