有没有"简单"的方法来做到这一点,或者我需要传递一个带有"OUTPUT ... INTO"语法的表变量?
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
Run Code Online (Sandbox Code Playgroud) uniqueidentifier(SQL Server)是否等效于IsDate或IsNumeric?或者有什么等同于(C#)TryParse?
否则我将不得不编写自己的功能,但我想确保我不会重新发明轮子.
我想要涵盖的场景如下:
SELECT something FROM table WHERE IsUniqueidentifier(column) = 1
Run Code Online (Sandbox Code Playgroud) 据我所知,Thread.Sleep(0)强制操作系统上下文切换.
我想检查在接收一些CPU时间之前可以在应用程序中传递的最长时间.
所以我构建了一个在while循环(c#)中执行Thread.Sleep(0)的应用程序,并计算每次调用之间传递的时间.
当此应用程序是在双核测试PC上运行的唯一应用程序时,最大观察时间不到1毫秒(平均为0.9微秒)并且它使用所有可用的CPU(100%).
当我沿着CPU填充虚拟应用程序(所有具有相同优先级)运行它时,最大时间约为25毫秒,平均时间为20毫秒.它的行为与我期望的完全一样.而且时间非常稳定.
每当它获得一些CPU时间时,它会立即将控制权交给任何有进行某些处理的人,这就像烫手山芋游戏(CPU使用率下降到0%).如果没有其他应用程序运行,则控件立即返回.
鉴于此行为,我预计此应用程序对运行实际应用程序的计算机的影响最小.(并且给我实际的"延迟",我期望在那里运行的应用程序中看到).但令我惊讶的是,它确实对这个特定系统的性能产生了负面影响(以可观察的方式).
我错过了一些关于Thread.Sleep(0)的重要观点吗?
作为参考,这里是该应用程序的代码
private bool _running = true;
private readonly Stopwatch _timer = new Stopwatch();
private double _maxTime;
private long _count;
private double _average;
private double _current;
public Form1()
{
InitializeComponent();
Thread t = new Thread(Run);
t.Start();
}
public void Run()
{
while(_running)
{
_timer.Start();
Thread.Sleep(0);
_timer.Stop();
_current = _timer.Elapsed.TotalMilliseconds;
_timer.Reset();
_count++;
_average = _average*((_count - 1.0)/_count) + _current*(1.0/_count);
if(_current>_maxTime)
{
_maxTime = _current;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为清晰起见而编辑(应用程序的目的): 我目前正在运行一个软实时多线程应用程序(以及一组应用程序),它们需要每隔大约300毫秒对一些输入作出反应,但我们不时会错过一些截止日期(不到1%的时间)我正在努力提高这个数字.
我想验证在同一台机器上由其他过程引起的当前变化是什么:我通过在上面的半实时机器上安装上面描述的应用程序来强调,观察到的最大时间将告诉我系统引起的变化.IE我有300毫秒但是在线程获得一些CPU时间之前的最大观察时间是50毫秒,所以为了提高性能,我应该将处理时间设置为最大250毫秒(因为我可能已经晚了50毫秒).
在.NET(C#)中,单元测试的调试/发布版本是否有任何优势/劣势?
您通常在构建服务器上使用哪种目标配置进行单元测试?有关系吗?
代码覆盖怎么样(对于这个,我猜测需要调试版本).
在NUnit中,我可以执行以下操作:
Assert.That(1.05,Is.EqualTo(1.0).Within(0.1));
Run Code Online (Sandbox Code Playgroud)
我也能做到这一点:
Assert.That(new[]{1.0,2.0,3.0},Is.EquivalentTo(new[]{3.0,2.0,1.0}));
Run Code Online (Sandbox Code Playgroud)
现在我想沿着这条线做点什么
Assert.That(new[]{1.05,2.05,3.05},
Is.EquivalentTo(new[]{3.0,2.0,1.0}).Within(0.1));
Run Code Online (Sandbox Code Playgroud)
除了Within在这种情况下不支持关键字.是否有解决方法或其他方法可以轻松地做到这一点?
是否有可能沿着这些方向做一些事情:
DELETE TOP(1) m
FROM MyTable m
OUTPUT deleted.*
LEFT JOIN MyOtherTable ON MyOtherTable.SomeColumn=s.SomeColumn
Run Code Online (Sandbox Code Playgroud)
我知道这有效:
DELETE TOP(1)
FROM MyTable
OUTPUT deleted.*
Run Code Online (Sandbox Code Playgroud)
这也有效(虽然没有意义):
DELETE TOP(1) m
FROM MyTable m
LEFT JOIN MyOtherTable ON m.SomeColumn=MyOtherTable.SomeColumn
Run Code Online (Sandbox Code Playgroud) 我第一次使用filestream数据类型(SQL Server 2008),当我进行一些快速插入/删除时,我遇到了问题.基本上,文件实际从文件系统中删除的速度比插入/删除速度慢,即使我手动调用垃圾收集器(据我所知,CHECKPOINT应该调用垃圾收集器).
下面的代码说明了问题 - 执行大约需要30秒,但是你需要等待几分钟才能从文件系统中删除最后一个文件(当我查找C:\ FSTest\Files文件夹时)
有没有办法加快垃圾收集器?(它似乎每10秒大致删除20个文件 - 这让我相信,如果我每秒存储/删除超过2条记录,我最终会最终填满硬盘)
谢谢
CREATE DATABASE FSTest ON PRIMARY
(NAME = FSTest_data, FILENAME = N'C:\FSTest\FSTest_data.mdf'),
FILEGROUP FSTestFileGroup CONTAINS FILESTREAM
(NAME = FSTestFiles,FILENAME = N'C:\FSTest\Files')
LOG ON
(NAME = 'FSTest_log', FILENAME = N'C:\FSTest\FSTest_log.ldf');
GO
USE FSTest;
GO
CREATE TABLE FSTest (
Guid UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),
Name VARCHAR (25),
Data VARBINARY(MAX) FILESTREAM);
GO
ALTER DATABASE FSTest SET RECOVERY SIMPLE;
GO
SET NOCOUNT ON
DECLARE @test int
SET @test=0
WHILE @test<1000 BEGIN …Run Code Online (Sandbox Code Playgroud) 我们的Teamcity代理现在在32位操作系统上运行,直到现在这还不是问题(我们现在有一个x64应用程序可以在那里构建).
我听说可以在32位操作系统上编译x64应用程序,但我从来没有这样做过.Teamcity在x64中构建特定项目所需的步骤是什么 - 理想情况下使用MSBuild?
当我将项目的MSBuild属性"Run Platform"设置为x64时,我的代理给出了以下警告:"未满足的要求:DotNetFramework4.0_x64存在"
作为旁注:我们最终会将代理移动到64位操作系统,但我想要一个短期解决方案.
请原谅我(如果已经有人问过这个问题)(我对数据仓库/ BI知之甚少,还没有掌握关键字).
我有一个每天增加超过10万行的表,每行有一个时间戳和关于项目的多个信息(尺寸,重量,颜色等).在此期间后,个人数据可能有用一个月左右,我们只对聚合感兴趣.我有一个专用软件,可以更详细地显示各行,主要使用PowerPivot来满足我的报告需求.
我可以想出一个SQL查询,每天填充一个新表:我会在每个小时/项目/批次中有一行,我会总结信息(sum/average/stddev/etc.)
在一天之内,我的脚本将启动并运行,我可以使用powerpivot对抗这个新表.这一切都在我感到舒服的地方:普通的旧SQL.
从我收集的关于DataWarehouse和BI的一些信息中,我要做的事情听起来很像创建维度和事实.因此,我的问题是:值得进一步调查这个方向(BI)或者因为我的问题相对简单,我会更好地留在关系数据库中.
NB正在生成的报告通常与另一个数据库相关联,以生成更有意义的信息.Powerpivot完成的任务非常好.
sql data-warehouse relational-database business-intelligence
在我们的连续集成服务器(Teamcity 5.1.3)上,我们有一个自动构建应用程序的msbuild脚本.
当我们启用"警告为错误"时:在Visual Studio中,它构建正常(它忽略"*.designer.cs"文件中的方法.但在构建服务器上,我们总是收到以下错误:
[(Rebuild target(s)):] somefile.Designer.cs(XX, XX): error CS1591: Warning as Error: Missing XML comment for publicly visible type or member...
Run Code Online (Sandbox Code Playgroud)
正在使用的MSBuild脚本如下所示:
<MSBuild Projects="proj\$(ProjectName).sln"
Targets="Clean;Rebuild"
Properties="Configuration=Release"
StopOnFirstFailure="True">
</MSBuild>
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么会这样做,但必须有一种方法告诉msbuild忽略生成的文件中缺少的注释?
EDITED
进一步挖掘:在Visual Studio解决方案中,我们选中了"警告为错误",但我们还添加了"抑制警告"文本框中列出的错误1591.MSBuild似乎没有拿起那个"压制警告"文本框并且无法构建.我能做什么?
再次编辑 问题是MSBuild正在针对任何CPU(并且在"任何CPU"配置中我们没有抑制错误1591).一旦我们更改了任何CPU以排除错误1591,它就开始在构建服务器上正确构建.谢谢那些有帮助的人.
msbuild teamcity continuous-integration compilation visual-studio
是否有任何(免费)工具能够生成显示合并的图表(在分支/标签之上).
我理解与此相关的困难以及可能产生的误导性信息,但我仍然想知道给定存储库中的合并(可视化).
c# ×4
sql ×4
sql-server ×4
msbuild ×2
teamcity ×2
windows ×2
.net ×1
64-bit ×1
compilation ×1
filestream ×1
nunit ×1
performance ×1
svn ×1
t-sql ×1
tortoisesvn ×1
unit-testing ×1