我在表的列中有类似下面的XML:
<?xml version="1.0" encoding="utf-8"?>
<container>
<param name="paramA" value="valueA" />
<param name="paramB" value="valueB" />
...
</container>
Run Code Online (Sandbox Code Playgroud)
我试图通过TSQL从XML中获取valueB部分
到目前为止,我正在获得正确的节点,但现在我无法弄清楚如何获取属性.
select xmlCol.query('/container/param[@name="paramB"]') from LogTable
Run Code Online (Sandbox Code Playgroud)
我想我可以添加/ @值到最后,但是SQL告诉我属性必须是节点的一部分.我可以找到许多用于选择子节点属性的示例,但兄弟属性中没有任何属性(如果这是正确的术语).
任何帮助,将不胜感激.
我意识到这在微优化领域太过分了,但我很想知道为什么调用DateTime.Now和DateTime.UtcNow是如此"昂贵".我有一个示例程序运行几个做"一些"工作的场景(添加到一个计数器)并试图这样做1秒钟.我有几个接近让它在有限的时间内完成工作.这些示例显示DateTime.Now和DateTime.UtcNow明显慢于Environment.TickCount,但与仅让一个单独的线程休眠1秒然后设置一个值以指示工作线程停止相比,即使这样也很慢.
所以我的问题是:
请原谅这个例子的详细程度:
class Program
{
private static volatile bool done = false;
private static volatile int doneInt = 0;
private static UInt64 doneLong = 0;
private static ManualResetEvent readyEvent = new ManualResetEvent(false);
static void Main(string[] args)
{
MethodA_PrecalcEndTime();
MethodB_CalcEndTimeEachTime();
MethodC_PrecalcEndTimeUsingUtcNow();
MethodD_EnvironmentTickCount();
MethodX_SeperateThreadBool();
MethodY_SeperateThreadInt();
MethodZ_SeperateThreadLong();
Console.WriteLine("Done...");
Console.ReadLine();
}
private static void MethodA_PrecalcEndTime()
{
int cnt = 0;
var doneTime = DateTime.Now.AddSeconds(1);
var startDT = DateTime.Now;
while (DateTime.Now <= doneTime)
{
cnt++;
}
var endDT = DateTime.Now;
Console.WriteLine("Time …
Run Code Online (Sandbox Code Playgroud) 在调试单元测试时,我的Visual Studio 2008 IDE表现得很奇怪:我有一个断点,当我点击它然后尝试使用F10时,测试结束.如果我在被测试方法中的每一行上设置断点,我将以随机方式结束,而不是下一行中的下一个.在清理系统重启后,我已经清理并重建了解决方案.这种行为仍然存在.有没有其他人经历过这个并得出结论.
此测试仅使用主执行线程(不创建其他线程)
我试图找到一种从一堆线程中记录有用上下文的方法.问题是很多代码都是通过线程池线程到达的事件处理的(据我所知),因此它们的名称与任何上下文无关.可以使用以下代码演示此问题:
class Program
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
new Thread(TestThis).Start("ThreadA");
new Thread(TestThis).Start("ThreadB");
Console.ReadLine();
}
private static void TestThis(object name)
{
var nameStr = (string)name;
Thread.CurrentThread.Name = nameStr;
log4net.ThreadContext.Properties["ThreadContext"] = nameStr;
log4net.LogicalThreadContext.Properties["LogicalThreadContext"] = nameStr;
log.Debug("From Thread itself");
ThreadPool.QueueUserWorkItem(x => log.Debug("From threadpool Thread: " + nameStr));
}
}
Run Code Online (Sandbox Code Playgroud)
转换模式是:
%date [%thread] %-5level %logger [%property] - %message%newline
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
2010-05-21 15:08:02,357 [ThreadA] DEBUG LogicalContextTest.Program [{LogicalThreadContext=ThreadA, log4net:HostName=xxx, ThreadContext=ThreadA}] - From Thread itself
2010-05-21 15:08:02,357 [ThreadB] DEBUG LogicalContextTest.Program …
Run Code Online (Sandbox Code Playgroud) 我们有一个生产表,有7.7亿行和变化.我们希望(/需要?)将主ID列从int更改为bigint以允许将来增长(并避免在32位整数空间耗尽时突然停止)
DEV中的实验表明,这并不像改变列那么简单,因为我们需要删除索引然后重新创建它.到目前为止DEV(比PROD略显谦逊)指数的下降还没有在1个半小时后完成.这个表每周7天,每天24小时播放,让它离线这么长时间不是一个选择.
有没有其他人不得不处理类似的情况?你是怎么做到的?
还有替代品吗?
编辑:附加信息:
以下两个陈述有什么区别?
alter table [dbo].[Demo] add constraint [UC_Demo_Code] unique ( [Code] )
go
create unique nonclustered index [UK_Demo_Code] on [dbo].[Demo] ( [NB_Code] )
go
Run Code Online (Sandbox Code Playgroud)
约束是否有索引来帮助它强制执行唯一性,还是会在每次插入/更新时执行表扫描?
有人可以向我解释为什么在下面的第三次DoSomething调用无效?(错误消息是"当前上下文中不存在名称'DoSomething'")
public class A { }
public class B : A
{
public void WhyNotDirect()
{
var a = new A();
a.DoSomething(); // OK
this.DoSomething(); // OK
DoSomething(); // ?? Why Not
}
}
public static class A_Ext
{
public static void DoSomething(this A a)
{
Console.WriteLine("OK");
}
}
Run Code Online (Sandbox Code Playgroud) 我有2个(可能更多的未来)批处理文件层,这使我的生活更轻松,直到我尝试添加带有空格的路径.
批处理文件1:
@echo off
set thinga=c:\final build
set thingb=\\server\deployment for final buil
echo.
echo thing a: %thinga%
echo thing b: %thingb%
echo.
call lala.bat "%thinga%" "%thingb%"
Run Code Online (Sandbox Code Playgroud)
批处理文件2(lala.bat):
@echo off
echo.
echo. Param 1 %1
echo. Param 2 %2
echo.
set BASE=%1
set TARGET=%2
echo. Want to run:
echo. doSomethingOnBaseFolder %BASE%
echo. doSomethingOnBaseSubFolder "%BASE%\bin\release\*" "%TARGET%\"
echo.
Run Code Online (Sandbox Code Playgroud)
这个输出是:
doSomethingOnBaseSubFolder ""c:\final build"\bin\release\*" ""\\server\deployment for final buil"\"
Run Code Online (Sandbox Code Playgroud)
但我想要输出
doSomethingOnBaseSubFolder "c:\final build\bin\release\*" "\\server\deployment for final buil\"
Run Code Online (Sandbox Code Playgroud)
有没有办法以任何其他方式逃离这个空间?
是否有更短的测试方法:
if (!((a == b) && (a == c) && (a == d) && (a == e) && (a == f)))
Run Code Online (Sandbox Code Playgroud)
我最后写了一个让我这样做的方法
if (!AllEqual(new[] { a, b, c, d, e, f }))
Run Code Online (Sandbox Code Playgroud)
这感觉更好,并且更具可读性,但我想知道框架中是否有某些东西可以做到这一点?
是否有<br />
在ASP.Net MVC中对编码进行换行的库存标准功能?
c# ×4
sql-server ×3
asp.net-mvc ×1
batch-file ×1
coding-style ×1
debugging ×1
log4net ×1
performance ×1
php ×1
threadpool ×1
unit-testing ×1
xml ×1
xpath ×1
xquery ×1