小编Iam*_*mIC的帖子

如何以原子方式读取x86 ASM中的值?

我知道如何在x86 ASM中自动写入一个值.但我怎么读一个?LOCK前缀不能与mov一起使用.

为了增加价值,我正在做:

lock inc dword ptr Counter
Run Code Online (Sandbox Code Playgroud)

如何以线程安全的方式读取Counter?

x86 assembly atomic thread-safety

6
推荐指数
2
解决办法
3774
查看次数

包括在SQL Server 2008 Express中覆盖索引时不可用

在MS SQL Server Manager Studio for 2008 Express中,"包含的列"字段始终在数据库关系图设计器的"索引/键"窗口中显示为灰色.

根据帮助,只要我没有创建聚簇索引,就应该可以使用它.

此外,如果我运行查询来创建索引(运行正常),则创建的查询不会列出添加的表.

我没有看到MS在Express版本中说这个功能不可用的地方.

有任何想法吗?

更多数据:

这是创建表的脚本:

CREATE UNIQUE INDEX IX_SocialTypes_Cover ON ClientSocialTypes(ClientID, SocialTypeID, [Source]) INCLUDE (URLID)
Run Code Online (Sandbox Code Playgroud)

这是表格脚本(索引缺失):

CREATE TABLE [dbo].[ClientSocialTypes](
    [SocialTypeID] [int] IDENTITY(1,1) NOT NULL,
    [ClientID] [int] NOT NULL,
    [SocialTypeClassID] [tinyint] NOT NULL,
    [Source] [nvarchar](50) NOT NULL,
    [TagCount] [int] NOT NULL,
    [URLID] [int] NULL,
 CONSTRAINT [PK_ClientSources] PRIMARY KEY CLUSTERED 
(
    [SocialTypeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON …
Run Code Online (Sandbox Code Playgroud)

sql-server indexing ssms sql-server-2008

6
推荐指数
2
解决办法
1673
查看次数

SQL Server ROWLOCK over SELECT如果不存在INSERT事务

我已经从SQL Server 2005升级到2008.我记得在2005年,ROWLOCK根本无法工作,我不得不使用PAGELOCK或XLOCK来实现任何类型的实际锁定.我知道读者会问"你做错了什么?" 没有.我最终证明我可以编辑一个"ROWLOCKED"行,但如果我升级锁定级别则不行.我没有机会看到它是否适用于SQL 2008.我的第一个问题是有没有人在2008年遇到过这个问题?

我的第二个问题如下.我想测试一个值是否存在,如果存在,则对相关列执行更新,而不是整行的插入.这意味着如果找到该行,则需要将其锁定,因为维护过程可能会在进程中删除此行,从而导致错误.

为了说明原理,以下代码是否有效?

BEGIN TRAN

SELECT      ProfileID
FROM        dbo.UseSessions
WITH        (ROWLOCK)
WHERE       (ProfileID = @ProfileID)
OPTION      (OPTIMIZE FOR (@ProfileID UNKNOWN))

if @@ROWCOUNT = 0 begin
    INSERT INTO dbo.UserSessions (ProfileID, SessionID)
    VALUES      (@ProfileID, @SessionID)
end else begin
    UPDATE      dbo.UserSessions
    SET         SessionID = @SessionID, Created = GETDATE()
    WHERE       (ProfileID = @ProfileID)
end

COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

sql-server locking sql-server-2005 sql-server-2008 rowlocking

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

在C#中将任意类型实例写入MemoryStream

在Delphi中,可以执行以下操作:

var
  ms  : TMemoryStream;
  i   : Integer;
begin
  ms := TMemoryStream.Create;
  i := 1024;
  ms.Write(@i, SizeOf(Integer));
  ms.Free;
end;
Run Code Online (Sandbox Code Playgroud)

这会将i的内存内容写入ms.

MemoryNet的.Net版本没有这样的功能(托管版本和非托管版本).我知道.Net在这方面与Delphi的原理不同.

如何在C#中做到这一点?我对"最佳实践"和最快的方法感兴趣.

.net c# serialization memorystream c#-4.0

6
推荐指数
2
解决办法
3762
查看次数

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
查看次数

HPC的哪种语言/框架:Java/.Net/Delphi/C/C++/Objective-C?

我已经无休止地考虑了哪种语言/框架最适合以下内容.我需要开发一个HPC框架.所有处理都将完全是OO.它将在线程和引擎之间的实例(外部)和内部之间传递对象.对象将是活动消息的扩展.

这些实例可以在移动,Windows,Mac,Linux等上运行.

系统需要能够以高速和高效率执行高度并行计算,理想情况下利用SSE,并且理想地支持CUDA/OpenCL.

我考虑过以下几点:

Java - 它是内存饥渴的,不能在Mac上运行(无论如何都不正式)
.Net - 内存饥渴; 平台范围有限; 没有本地SSE
德尔福 - 不是64位; 有限的平台范围
C/C++ - Mac不直接支持; 代码复杂; 然而它无处不在的
Objective-C - 由Mac支持; 似乎在其他地方得到支持; 通过传递消息来工作,这符合我的设计要求; 不太了解它

有什么建议?

.net c c++ java objective-c

5
推荐指数
1
解决办法
895
查看次数

理解Java的"最终"转换为C#

我不是Java程序员.我阅读了关于"final"的文档,并将其理解为"变量的值可以设置一次且只能设置一次".

我正在将一些Java翻译成C#.代码未按预期执行.我试图找出原因,并发现最终的一些用途没有意义.

代码段1:

final int[] PRED = { 0, 0, 0 };
...
PRED[1] = 3;
Run Code Online (Sandbox Code Playgroud)

PRED [1]会是0还是3?

代码段2:

final int[] PRED = new int[this.Nf];
for (int nComponent = 0; nComponent < this.Nf; nComponent++) {
    PRED[nComponent] = 0;
}
...
PRED[1] = 3;
Run Code Online (Sandbox Code Playgroud)

肯定PRED [0]将保持为0?

c# java final

5
推荐指数
1
解决办法
191
查看次数

C#64位版本代码的反汇编视图比32位调试代码长75%?

编辑

我测试了32位的版本,代码很紧凑.因此,下面是64位问题.


我正在使用VS 2012 RC.调试是32位,Release是64位.下面是调试然后发布一行代码的反汇编:

         crc = (crc >> 8) ^ crcTable[((val & 0x0000ff00) >> 8) ^ crc & 0xff];
0000006f  mov         eax,dword ptr [ebp-40h] 
00000072  shr         eax,8 
00000075  mov         edx,dword ptr [ebp-3Ch] 
00000078  mov         ecx,0FF00h 
0000007d  and         edx,ecx 
0000007f  shr         edx,8 
00000082  mov         ecx,dword ptr [ebp-40h] 
00000085  mov         ebx,0FFh 
0000008a  and         ecx,ebx 
0000008c  xor         edx,ecx 
0000008e  mov         ecx,dword ptr ds:[03387F38h] 
00000094  cmp         edx,dword ptr [ecx+4] 
00000097  jb          0000009E 
00000099  call        6F54F5EC 
0000009e  xor         eax,dword ptr [ecx+edx*4+8] 
000000a2  mov         dword …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction assembly disassembly visual-studio-2012

5
推荐指数
1
解决办法
804
查看次数

替换AppDomain.GetCurrentThreadId(); 使用ManagedThreadId

GetCurrentThreadId()已被弃用,MSDN状态ManagedThreadId替换它.

但是,我得到了不同的结果,后者导致我的代码中出现异常.我的代码改编自这篇文章.

        public static void SetThreadProcessorAffinity(params byte[] cpus)
        {
            if (cpus == null)
            {
                throw new ArgumentNullException("cpus");
            }

            if (cpus.Length == 0)
            {
                throw new ArgumentException(@"You must specify at least one CPU.", "cpus");
            }

            // Supports up to 64 processors
            long cpuMask = 0;
            byte max = (byte)Math.Min(Environment.ProcessorCount, 64);

            foreach (byte cpu in cpus)
            {
                if (cpu >= max)
                {
                    throw new ArgumentException(@"Invalid CPU number.");
                }

                cpuMask |= 1L << cpu;
            }

            // Ensure managed thread is linked …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

5
推荐指数
1
解决办法
7582
查看次数

PostgreSQL 索引如何引用行?

PG中的索引是否存储某种类型的行内部ID,或者存储行的主键?

我推断它必须是内部行 ID,因为表不必具有 PK。但是,我找不到这个问题的具体答案。

postgresql indexing storage postgresql-9.6

5
推荐指数
1
解决办法
1430
查看次数