小编Iam*_*mIC的帖子

以原生速度运行动态编译的C#代码......怎么样?

我已经阅读了几篇关于编写和编译动态C#代码的帖子.例如,这篇文章.我知道它可以通过几种方式完成.

但是,调用代码调用程序很慢.我做了一个简单的基准测试,它比调用本机方法慢了约500倍.

我希望能够做的是等同于加载DLL并直接调用其中一个方法("本机"),这将提供我想要的速度优势.

最简单的方法是什么?将动态代码编译为dll然后加载它?可以在记忆中完成吗?

编辑

我不关心编译时间.只执行.

编辑2,3

这是我写的基准代码:

    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 …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction assemblies dynamic

9
推荐指数
1
解决办法
4433
查看次数

Threaded execution speed of LOCK CMPXCHG

I wrote a multi-threaded app to benchmark the speed of running LOCK CMPXCHG (x86 ASM).

On my machine (dual Core - Core 2), with 2 threads running and accessing the same variable, I can perform about 40M ops/second.

Then I gave each thread a unique variable to operate on. Obviously this means there's no locking contention between the threads, so I expected a speed performance. However, the speed didn't change. Why?

parallel-processing performance x86 assembly locking

8
推荐指数
1
解决办法
881
查看次数

MongoDB:存储以及何时使用关系

我是MongoDB的新手,所以请耐心等待.

我有两个问题:

首先,请采取以下措施:

// add a record
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
Run Code Online (Sandbox Code Playgroud)

MongoDB是否将"title"和"author"存储为此集合中此对象的每个条目的文本?或者它是否创建了一个模式并将它们转换为字段数(或者根本没有存储并纯粹存储数据)?

我的第二个问题是:什么时候应该使用"关系"?假设我有100个经销商,每个经销商包含(对象)1,000个客户,每个客户有10个项目.这使得一个巨大的整体对象可以操纵.

在SQL世界中,这都是相关的"对象".在Document world中,我们尝试通过嵌入子对象来存储完整的对象.

但是,这可能很笨拙.这是什么最好的做法?有人可以指点我的指南.

谢谢.

database-design mongodb document-database

8
推荐指数
1
解决办法
2953
查看次数

为什么.Net使用SIMD而不是x87用于SIMD不固有的数学运算?

这是一个好奇心问题.我正在看这个代码反汇编(C#,64位,发布模式,VS 2012 RC):

            double a = 10d * Math.Log(20d, 2d);
000000c8  movsd       xmm1,mmword ptr [00000138h] 
000000d0  movsd       xmm0,mmword ptr [00000140h] 
000000d8  call        000000005EDC7F50 
000000dd  movsd       mmword ptr [rsp+58h],xmm0 
000000e3  movsd       xmm0,mmword ptr [rsp+58h] 
000000e9  mulsd       xmm0,mmword ptr [00000148h] 
000000f1  movsd       mmword ptr [rsp+30h],xmm0 
            a = Math.Pow(a, 6d);
000000f7  movsd       xmm1,mmword ptr [00000150h] 
000000ff  movsd       xmm0,mmword ptr [rsp+30h] 
00000105  call        000000005F758220 
0000010a  movsd       mmword ptr [rsp+60h],xmm0 
00000110  movsd       xmm0,mmword ptr [rsp+60h] 
00000116  movsd       mmword ptr [rsp+30h],xmm0 
Run Code Online (Sandbox Code Playgroud)

...并且发现奇怪的是编译器没有在此处使用x87指令(Power使用日志).当然,我不知道调用位置的代码是什么,但我知道SIMD没有Log功能,这使得这个选择更加奇怪.此外,这里什么都没有,所以为什么SIMD而不是简单的x87?

在较小的一点上,我还发现奇怪的是没有使用x87 FYL2X指令,这是专门针对第一行代码中所示的情况而设计的.

任何人都可以对此有所了解吗?

.net compiler-construction assembly simd disassembly

8
推荐指数
1
解决办法
1015
查看次数

B树,数据库,顺序与随机插入和速度.随机赢了

编辑

@Remus纠正了我的测试模式.您可以在下面的答案中看到更正后的版本.

我接受了用DECIMAL(29,0)替换INT的建议,结果如下:

十进制:2133
GUID:1836

随机插入仍然会赢,即使行数稍大一些.

尽管解释表明随机插入比连续插入慢,但这些基准测试表明它们显然更快.我得到的解释不符合基准.因此,我的问题仍然集中在b树,顺序插入和速度上.

...

我从经验中知道,当数据按顺序添加到它们时(无论方向如何),b树的性能都很糟糕.但是,当随机添加数据时,可以获得最佳性能.

这很容易用RB-Tree来演示.顺序写入会导致执行最大数量的树余额.

我知道很少有数据库使用二叉树,而是使用n阶平衡树.我逻辑上假设它们在顺序输入时遇到与二叉树类似的命运.

这引起了我的好奇心.

如果是这样,则可以推断出写入顺序ID(例如在IDENTITY(1,1)中)会导致树的多次重新平衡发生.我看过许多帖子反对GUID,因为"这些会导致随机写入".我从不使用GUID,但令我印象深刻的是,这个"坏"点实际上是一个点.

所以我决定测试它.这是我的代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T1](
    [ID] [int] NOT NULL
 CONSTRAINT [T1_1] PRIMARY KEY CLUSTERED ([ID] ASC) 
)
GO

CREATE TABLE [dbo].[T2](
    [ID] [uniqueidentifier] NOT NULL
 CONSTRAINT [T2_1] PRIMARY KEY CLUSTERED ([ID] ASC)
)

GO

declare @i int, @t1 datetime, @t2 datetime, @t3 datetime, @c char(300)

set @t1 = GETDATE()
set @i = 1

while @i < …
Run Code Online (Sandbox Code Playgroud)

sql sql-server benchmarking clustered-index

7
推荐指数
1
解决办法
1035
查看次数

C#动态通用列表

我想创建一个通用的List <>,其类型在运行时声明.

我可以做到以下几点,但由于它是动态的,我怀疑存在速度惩罚.我正在为异国情调的数据库编写一个包装器,因此速度至关重要.

List<dynamic> gdb = new List<dynamic>()
Run Code Online (Sandbox Code Playgroud)

我在动态泛型类型中阅读了这篇文章,但无法让它发挥作用.具体来说,该对象不会显示为List,因此没有添加方法.

    Type ac;

    switch (trail[dataPos].Type)
    {
        case GlobalsSubscriptTypes.Int32:
            ac = typeof(System.Int32);

            break;
        case GlobalsSubscriptTypes.Int64:
            ac = typeof(System.Int64);

            break;

        default:
            ac = typeof(System.String);

            break;
    }

    var genericListType = typeof(List<>);
    var specificListType = genericListType.MakeGenericType(ac);
    var gdb = Activator.CreateInstance(specificListType);
Run Code Online (Sandbox Code Playgroud)

如何让gdb显示为以下之一:

List<System.Int32>
List<System.Int64>
List<System.String>
Run Code Online (Sandbox Code Playgroud)

c# generics dynamic type-conversion c#-4.0

7
推荐指数
1
解决办法
5236
查看次数

将CSV文本数组导入PostgreSQL 9.2

我有这样的数据:

Akhoond,1,Akhoond,"{""Akhund"",""Akhwan""}",0

pgAdmin的导入拒绝了.文本[]需要采用什么格式在CSV中?

我也试过这个:

Akhoond,1,Akhoond,"{Akhund,Akhwan}",0

这是表创建:

CREATE TABLE private."Titles"
(
  "Abbrev" text NOT NULL,
  "LangID" smallint NOT NULL REFERENCES private."Languages" ("LangID"),
  "Full" text NOT NULL,
  "Alt" text[],
  "Affix" bit
)
WITH (
  OIDS=FALSE
);

ALTER TABLE private."Titles" ADD PRIMARY KEY ("Abbrev", "LangID");

CREATE INDEX ix_titles_alt ON private."Titles" USING GIN ("Alt");

ALTER TABLE private."Titles"
  OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

csv postgresql postgresql-9.2

7
推荐指数
1
解决办法
4047
查看次数

为 CLANG 编译器提供循环长度断言

我有一个循环将两个float*数组加载到__m256向量中并处理它们。在这个循环之后,我有代码将平衡值加载到向量中,然后处理它们。所以函数上没有对齐要求。

以下是将数据余额加载到向量中的代码:

size_t constexpr            FLOATS_IN_M128              = sizeof(__m128) / sizeof(float);
size_t constexpr            FLOATS_IN_M256              = FLOATS_IN_M128 * 2;
Run Code Online (Sandbox Code Playgroud)

...

assert(bal < FLOATS_IN_M256);

float ary[FLOATS_IN_M256 * 2];    
auto v256f_q = _mm256_setzero_ps();
_mm256_storeu_ps(ary, v256f_q);
_mm256_storeu_ps(&ary[FLOATS_IN_M256], v256f_q);   
float *dest = ary;
size_t offset{};

while (bal--)
{
    dest[offset] = p_q_n[pos];
    dest[offset + FLOATS_IN_M256] = p_val_n[pos];
    offset++;
    pos++;
}

// the two vectors that will be processed
v256f_q = _mm256_loadu_ps(ary);
v256f_val = _mm256_loadu_ps(&ary[FLOATS_IN_M256]);    
Run Code Online (Sandbox Code Playgroud)

assert(bal < FLOATS_IN_M256);当我使用编译器资源管理器时,设置为“x86-64 clang 16.0.0 -march=x86-64-v3 -O3”,编译器会在该行存在时展开循环。但是,assert()在模式中被忽略 …

c++ simd clang compiler-optimization visual-c++

7
推荐指数
1
解决办法
134
查看次数

SQL Server切换到索引扫描的基数(与搜索有关)

假设一个表包含足够的信息以保证索引搜索,SQL Server(或PostgreSQL)选择索引扫描的基数是什么?

我问这个的原因是我之前发布了一个问题(链接),其中两个查询以相同的速度执行,但是一个没有尝试在已处理的列上使用索引.在SQL Server建议我放置一个覆盖索引,其中包括要查询的列(它为两个查询建议这个),我开始寻找原因,为什么它会提出这样一个奇怪的建议.

我尝试使索引覆盖和复合,但两者都在同一时间执行(我们说的是300万行).

最后我得出结论是因为数据的超高基数.每一行都是独特的.我推断这导致SQL服务器选择索引扫描.但是,查询声明"WHERE Col1>?AND Col2 <?",所以这有点令人困惑.

我的问题是:

  1. 什么基数将RDBMS始终选择索引扫描?
  2. 任何人都可以解释为什么当WHERE语句表明这有意义时,SQL Server不会使用索引?

我附上了执行计划. 替代文字

sql-server postgresql indexing sql-execution-plan

6
推荐指数
1
解决办法
2030
查看次数

Cassandra 1.1存储引擎如何存储复合材料?

我想要了解Cassandra的复合色谱柱存储引擎.不幸的是,到目前为止我读过的文档包含错误,让我有点空白.

首先,术语.

复合列通过使用复合主键包含完全非规范化的宽行.

这似乎具有误导性,因为AFAIK复合列可以用于复合键,也可以简单地用作除键之外的复合列.

1:如何实现复合键和列名?我能找到的每个CQL示例只显示复合键作为列,而不是普通复合列.

假设我们将列'a','b','c','d'作为主要复合键+列'e','f'.我知道'a'将是行和分区键.

我们假设以下数据:

a    b    c    d    e    f
1a   1b   1c   1d   e1   f1
1a   1b   1c   2d   e1   f2
1a   1b   1c   2d   e2   f3
2a   2b   2c   2d   e2   f4
Run Code Online (Sandbox Code Playgroud)

2:这是如何存放在引擎盖下的?我想这里真正的问题是'b','c','d'如何映射出来,因为列根据定义不是分层的.

3:我读过的文档说不再使用紧凑型存储.但是如果不需要添加非主键列呢...那么不使用它的原因是什么?

indexing storage composite-key cassandra database-indexes

6
推荐指数
1
解决办法
2400
查看次数