可能重复:
T-SQL中的空语句
如何在SQL Server中编译?
IF @value IS NULL
BEGIN
-- I don't want to do anything here
END
Run Code Online (Sandbox Code Playgroud) 我的团队使用大型模拟应用程序的COM API.大多数模拟文件都会运行到数百兆字节,并且在打开时似乎会完全加载到内存中.
我们执行的主要任务是遍历文件的对象模型中的所有元素,然后对每个元素执行"某事".
我们最近将我们的代码库从.NET 2迁移到VS 2010中的.NET 4,并且已经看到迭代速度下降了大约40倍(从大约10秒到大约8分钟).我们已将其减少到最小的代码示例(10行左右); 在VS 2005中编译它,运行它然后在VS 2010中打开项目并编译,将框架保留为2(我们使用制造商提供的COM互操作程序集).
在2005年,测试应用程序在2010年完成10秒,需要8分钟.
可能是什么导致了这个?
UPDATE
代码相当于:
var server = new Server();
var elements = server.Elements;
var elementCount = elements.Count;
for(int i = 0; i < elementsCount; ++i)
{
var element = elements[i];
}
Run Code Online (Sandbox Code Playgroud)
运行VS 2010的代码比VS 2005长40倍.
更新2
我合理地说,在一种情况下操作可能比另一种情况下显着减慢的唯一原因是数据在不同版本中通过COM进行不同的传输.
我们记录了两个案例的绑定日志,这是我们发现的; 在快速版本CustomMarshalers的天然图像未发现(这是由FUSLOGVW捕获的结合日志)
mscorlib程序
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.HTM
快速
LOG: Start binding of native image mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
LOG: Start validating native image mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
WRN: Native image does not …
Run Code Online (Sandbox Code Playgroud) 当命名一个布尔值或一个返回布尔值的函数时,通常用'is'作为前缀,例如
什么时候引用多个项目,它应该是:
我可以看到两者的论点; 提供一致性,可能稍微更好的可读性,使代码以更自然的方式读取.
任何意见?
使用.NET 4.0代码合同进行TDD的最佳实践建议是什么?
我特别想到,我的问题是,鉴于TDD的一个要点是允许代码自我记录并且合同现在提供了文档的一部分,代码合同是否应该像其他代码一样进行测试?
在Oracle中,编写动态SQL时,会执行以下操作:
create or replace procedure myProc(n in number)
as
begin
execute immediate
'update myTable set myColumn = :n'
using n;
commit;
end;
Run Code Online (Sandbox Code Playgroud)
然后'魔术发生'.SQL Server中等效的概念/语法是什么(如果有的话)?(顺便说一句,我正在使用SQL Server 2005)
例如,假设我有一个视图:
CREATE VIEW [dbo].[PaymentSchedule_vw]
AS
SELECT
[Order].Id [Order Id]
,[PaymentSchedule].Date [Payment Date]
FROM
_Order123 [Order]
INNER JOIN
_Order123_Shedule [PaymentSchedule]
ON
[Order].Id = [PaymentSchedule].OrderId
GO
Run Code Online (Sandbox Code Playgroud)
如何寻找的类型[Order Id]
和[Payment Date]
?
设置如下:
从主应用程序域调用非托管C++库时,与总执行成本相比,托管到非托管转换的成本相当可忽略不计.但是,从最初没有加载库的第二个应用程序域,托管到非托管转换的成本变得很大; 数量级更大.我知道这是因为我已经运行了ANTS性能分析器,这就是它告诉我的.
C++/CLI程序集中有一些非托管静态变量,我在创建新的应用程序域时尝试替换它们,但这并没有改变性能.很可能会有一堆隐藏的.
这可能会发生什么?为什么其他应用领域的转换速度如此之慢?试图改善事情有什么明显之处吗?
某些上下文:代码在单独的应用程序域中运行以进行隔离,以便在出现问题时将其拆除.将它与主app域隔离是非常好的.可以启动一个运行非托管代码的新进程,但这可能很昂贵,因为它可能需要大量数据进行序列化和反序列化,并且在新进程中引导所有内容的成本也相当大.在一般情况下,序列化和引导程序的成本将远远低于我所看到的托管到非托管转换的成本,但是涉及到很多混乱,它仍然会减慢很多事情.
我有以下简化架构:
CREATE TABLE [file]
(
id UNIQUEIDENTIFIER NOT NULL,
uri NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_file PRIMARY KEY (id ASC) ON [PRIMARY]
)
CREATE TABLE [property]
(
id UNIQUEIDENTIFIER NOT NULL,
name NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_property PRIMARY KEY (id ASC) ON [PRIMARY]
)
CREATE TABLE [metadata]
(
fileid UNIQUEIDENTIFIER NOT NULL,
propertyid UNIQUEIDENTIFIER NOT NULL,
value NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_metadata PRIMARY KEY (fileid, propertyid ASC) ON [PRIMARY]
)
Run Code Online (Sandbox Code Playgroud)
凡[fileid]
FKS到[file].[id]
和[propertyid]
FKS到[property].[id]
.假设[properyid]
是 …
使用Visual Studio 2015,使用2015工具集:当我尝试直接签署程序集时,如下所示:
签名总是失败,并出现以下错误:
LNK1346 ALINK operation failed (80040436) : Error signing assembly -- The process cannot access the file because it is being used by another process.
可以在Visual Studio 2013中签署相同的程序集(我今天刚刚升级了它).
这是2015年的一个已知问题(当我搜索该错误时找不到任何错误)?或者我做错了什么?
编辑:解决方法
这似乎是另一个McAfee AV错误.但是,还有另一种方法可以对文件进行签名,这可能会让McVirus有足够的时间释放它已经取出的锁.
程序集可以延迟签名,sn -R $(TargetPath) $(LinkKeyFile)
可以作为post build事件运行以完成签名.这适用于我和@Moop.
t-sql ×4
sql-server ×3
c# ×2
c++-cli ×2
.net ×1
appdomain ×1
c#-4.0 ×1
coding-style ×1
com ×1
dynamic-sql ×1
php ×1
sql ×1