小编Iam*_*mIC的帖子

将所有非聚集索引移动到SQL Server中的另一个文件组

在SQL Server 2008中,我想将数据库中的所有非聚集索引移动到辅助文件组.最简单的方法是什么?

sql-server indexing database-design filegroup

17
推荐指数
2
解决办法
2万
查看次数

SQL Server,误导性的XLOCK和优化

从我最近的一些测试和阅读中看来,似乎XLOCK的"X"(独家)名称部分具有误导性.它实际上不会锁定UPDLOCK.如果它是独占的,它将阻止外部SELECT,但它不会.

我无法从阅读或测试中看到两者之间的区别.

XLOCK创建独占锁的唯一时间是与TABLOCK一起使用时.我的第一个问题是"为什么只有这种粒度?"

此外,我遇到了一个博客,其中说明了以下内容:

但请注意XLOCK提示.SQL Server将有效地忽略XLOCK提示!SQL Server检查自最早的打开事务以来数据是否已更改,这是一种优化.如果不是,则忽略xlock.这使得xlock提示基本上没用,应该避免.

有人遇到过这种现象吗?

根据我所看到的情况,似乎应该忽略这一提示.

sql-server locking sql-server-2008 pessimistic-locking

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

.Net中的"Double"和"double"之间是否存在有意义的差异?

至于最佳实践,使用之间是否存在有意义的差异:

Double d;
Run Code Online (Sandbox Code Playgroud)

double d;
Run Code Online (Sandbox Code Playgroud)

我知道最佳实践充满了矛盾,所以我知道答案可能会有所不同.我只是想知道两者之间的实用差异.

.net naming-conventions

15
推荐指数
2
解决办法
9098
查看次数

何时使用volatile来抵消C#中的编译器优化

我花了很多周时间在C#4.0中进行多线程编码.但是,有一个问题对我来说仍然没有答案.

我知道volatile关键字阻止编译器将变量存储在寄存器中,从而避免无意中读取过时值.写入在.Net中总是不稳定的,因此任何说明它也避免了stales写入的文档都是多余的.

我也知道编译器优化有些"不可预测".以下代码将说明由于编译器优化而导致的停顿(在VS之外运行发布编译时):

class Test
{
    public struct Data
    {
        public int _loop;
    }

    public static Data data;

    public static void Main()
    {
        data._loop = 1;
        Test test1 = new Test();

        new Thread(() =>
        {
            data._loop = 0;
        }
        ).Start();

        do
        {
            if (data._loop != 1)
            {
                break;
            }

            //Thread.Yield();
        } while (true);

        // will never terminate
    }
}
Run Code Online (Sandbox Code Playgroud)

代码表现如预期.但是,如果我取消注释//Thread.Yield(); 行,然后循环将退出.

此外,如果我在do循环之前放入Sleep语句,它将退出.我不明白.

当然,用volatile来装饰_loop也会导致循环退出(以其显示的模式).

我的问题是:编译器遵循的规则是什么,以确定何时隐含执行易失性读取?为什么我仍然可以通过我认为奇怪的措施退出循环?

编辑

IL代码如图所示(档位):

L_0038: ldsflda valuetype ConsoleApplication1.Test/Data ConsoleApplication1.Test::data
L_003d: ldfld int32 ConsoleApplication1.Test/Data::_loop
L_0042: ldc.i4.1 
L_0043: beq.s L_0038 …
Run Code Online (Sandbox Code Playgroud)

c# multithreading .net-4.0 compiler-optimization

15
推荐指数
1
解决办法
1158
查看次数

无休止的争论:SQL Server中的原子插入,锁定和事务.它在这里结束

编辑:我的问题是,"为什么我的第一个代码示例有效?" 请继续阅读......

编辑1:毫无疑问,唯一约束是确保不会发生重复的正确方法.这是给定的.但是,有时我们需要知道我们正在尝试重复输入.此外,这篇文章不仅仅是处理重复.

这可能是对SO的100多个问题的重复.我已经阅读了关于原子更新,锁和并发的简单问题的无穷无尽的混淆和矛盾.

我看到博客和专家在这些方面存在广泛的分歧.在这里,我根据人们建议的各种解决方案提供测试代码,指出结果,陈述我的观点,并邀请您的评论.

上下文:我正在运行SQL Server 2008 Express SP2.

我创建了以下测试表:

create table dbo.Temp (Col int)
Run Code Online (Sandbox Code Playgroud)

由于我们想要测试SQL代码的想法而不是约束,因此该表故意不对其进行约束.

我在2个然后3个查询窗口中同时运行以下命令:

declare @i int
set @i = 0

while @i < 5000 begin
    set @i = @i + 1
    update dbo.temp set Col = (SELECT Col from dbo.Temp) + 1
end
Run Code Online (Sandbox Code Playgroud)

我可以看到,我没有使用任何显式锁定.所有数据库设置均为默认值 我检查了Col的值,它是所需的数字:25,000.没有错过.

由于SQL Server是ACID,"A"告诉我们单个语句是以原子方式执行的.因此,基于上述内容,我们可以同意那些说如上所述的简单更新不需要锁定的人.

接下来,我在3个查询窗口中同时运行以下命令:

while @i < 5000 begin
    set @i = @i + 1
    insert into dbo.temp select @i where not exists
      (select 1 from dbo.temp where Col …
Run Code Online (Sandbox Code Playgroud)

sql-server concurrency locking sql-server-2008

14
推荐指数
0
解决办法
3095
查看次数

Nulls和MERGE语句:我需要将值设置为无穷大.怎么样?

在SQL Server 2008中,我使用的是MERGE.一切都很好,除了我有2个可以为空的列.如果我传递一个空值并且目标不是null,则MERGE没有看到差异(每个BOL对ev = false = false ).如果我在两侧使用IsNull(源和目标),但有可能错误评估值的问题.

我的意思是,如果我说:

WHEN MATCHED AND NOT (IsNull(tgt.C, 0) = IsNull(src.C, 0)) THEN
Run Code Online (Sandbox Code Playgroud)

那么如果tgt.C为null且src.C = 0,则不会执行更新.无论我选择什么替代价值,我都会遇到这个问题.

我还尝试了"AND NOT(... true ...)"语法,因为BOL声明对null的评估结果为FALSE.但是,它们似乎实际上导致NULL并且不会导致我的多部分语句变为false.

我认为一种解决方案是使用NaN或-INF或+ INF,因为它们在目标中无效.但是我找不到在SQL中表达这种方法的方法.

任何想法如何解决这个问题?

编辑:

以下逻辑解决了这个问题,但它很冗长,不会导致快速逃避:

declare @i int, @j int

set @j = 0
set @i = 0

if ISNULL(@i, 0) != ISNULL(@j, 0) OR 
    ((@i is null or @j is null) and not (@i is null and @j is null))
    print 'update';
Run Code Online (Sandbox Code Playgroud)

sql-server null sql-server-2008

14
推荐指数
3
解决办法
2万
查看次数

C#加载JPG文件,解压缩BitmapImage

我试图从JPG中提取BitmapImage.这是我的代码:

FileStream fIn = new FileStream(sourceFileName, FileMode.Open); // source JPG
Bitmap dImg = new Bitmap(fIn);
MemoryStream ms = new MemoryStream();
dImg.Save(ms, ImageFormat.Jpeg);
image = new BitmapImage();
image.BeginInit();
image.StreamSource = new MemoryStream(ms.ToArray());
image.EndInit();
ms.Close();
Run Code Online (Sandbox Code Playgroud)

图像以0×0图像返回,这当然意味着它不起作用.我该怎么做呢?

c# jpeg bitmap image-processing bitmapimage

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

MongoDB对层次类型查询的适用性

我有一个特定的数据操作要求,我已经解决了如何在SQL Server和PostgreSQL中做.但是,我对速度不太满意,所以我正在调查MongoDB.

描述查询的最佳方法如下.描绘美国的分层数据:国家,州,县,市.假设一个特定的供应商可以为整个加州服务.另一个可能只服务于洛杉矶.可能有数十万个供应商,他们都可以从这个层次结构中的某些点进行服务.我并没有把它与Geo混淆 - 我用它来说明需要.

使用递归查询,可以很容易地获得可以为特定用户提供服务的所有供应商的列表.如果他是在说帕萨迪纳,美国加利福尼亚州洛杉矶,我们会走到层次得到应用的ID,然后查询回落,找到供应商.

我知道这可以优化.同样,这只是一个简单的查询示例.

我知道MongoDB是一个文档存储.这非常适合我的其他需求.问题是它对我描述的查询类型有多适合?(我知道它没有连接 - 这些是模拟的).

我知道这是一个"一段字符串多长时间"的问题.我只是想知道是否有任何人有使用MongoDB做这种事情的经验.从0到测试可能需要一段时间,如果MongoDB不适合这个,我希望节省时间.

当地的电影商店"A"可以在斯普林菲尔德供应Blu-Rays.具有全州分布的连锁店"B"可以向所有IL提供Blu-Rays.按需下载商店"C"可以供应给所有美国用户.

如果我们想要获得伊利诺斯州斯普林菲尔德的所有适用电影供应商,那么答案将是[A,B,C].

换句话说,在层次结构上有许多不同级别的供应商.

hierarchical-data mongodb mongodb-.net-driver

11
推荐指数
1
解决办法
9430
查看次数

PostgreSQL的扩展与MongoDB相比如何?

我非常了解MongoDB的可扩展性如何令人惊讶,特别是它的自动分片,以及将服务器热添加到集群的能力.

但是,我没有找到关于PostgreSQL可扩展性的大量数据.我知道它有表空间,就像其他RDBMS一样.它可以自动增长(如分片)吗?或者它是像SQL Server中的手动过程?

有谁知道我可以在哪里获得更多数据?

postgresql rdbms scalability sharding mongodb

10
推荐指数
1
解决办法
5267
查看次数

使用T4和C#在运行时编译动态代码

我一直在使用TextTemplatingFilePreprocessor上T4阅读文章展示了如何动态地生成成为项目的一部分,并与该项目编译的代码.

是否可以使用T4生成在运行时编译,输出到DLL并加载和执行的代码,所述代码可以访问与dll相关的常用可见性功能?

如果是的话,请你指点一个例子.

我有效地尝试使用IL生成动态dll,而不是使用C#.

编辑

我需要的具体案例很简单.我正在编写一个消息路由器,用于将消息路由到服务.服务可以是本地的或远程的.声明性脚本编译为C#.动态部分是"这项服务是本地还是远程服务?".输出C#相应地改变.本地/远程的路由风格不同,因此具有动态特性.

这是我需要的一个例子.

.net c# t4 code-generation

10
推荐指数
1
解决办法
4530
查看次数