我正在使用postgresql.我有如下表格
parent_id child_id
----------------------
101 102
103 104
104 105
105 106
Run Code Online (Sandbox Code Playgroud)
我想编写一个sql查询,它将给出输入的最终父级.
即假设我传递106作为输入,那么它的输出将是103.
(106 --> 105 --> 104 --> 103)
Run Code Online (Sandbox Code Playgroud) 我需要按字符串锁定一段代码.当然,以下代码非常不安全:
lock("http://someurl")
{
//bla
}
Run Code Online (Sandbox Code Playgroud)
所以我一直在做一个替代品.我通常不会在这里发布大量的代码,但是当涉及到并发编程时,我有点担心我自己的同步方案,所以我提交我的代码来询问是否理智这样做以这种方式或是否有一个更直接的方法.
public class StringLock
{
private readonly Dictionary<string, LockObject> keyLocks = new Dictionary<string, LockObject>();
private readonly object keyLocksLock = new object();
public void LockOperation(string url, Action action)
{
LockObject obj;
lock (keyLocksLock)
{
if (!keyLocks.TryGetValue(url,
out obj))
{
keyLocks[url] = obj = new LockObject();
}
obj.Withdraw();
}
Monitor.Enter(obj);
try
{
action();
}
finally
{
lock (keyLocksLock)
{
if (obj.Return())
{
keyLocks.Remove(url);
}
Monitor.Exit(obj);
}
}
}
private class LockObject
{
private int leaseCount;
public void …
Run Code Online (Sandbox Code Playgroud) 好吧,不是Heisenbug,但性质相似.
我正在开发一个WPF应用程序.调试时,逻辑到达某一点,然后应用程序无缘无故退出.VS调试器没有捕获任何内容,输出窗口中的以下是问题的唯一指示:
程序'[6228] SomeApp.vshost.exe:Managed(v4.0.30319)'已退出,代码为1073741855(0x4000001f).
在调试发行版本时,或者确实从调试器运行调试版本时(事实上所有组合都没有在调试器中运行调试版本),一切正常.
我试图用以下代码捕获未处理的异常:
AppDomain
.CurrentDomain
.UnhandledException +=
(sender, e) =>
{
Debug.WriteLine("Unhandled Exception " + e.ExceptionObject);
};
Application
.Current
.DispatcherUnhandledException +=
(sender1, e1) =>
{
Debug.WriteLine("DispatcherUnhandledException " + e1.Exception);
};
Run Code Online (Sandbox Code Playgroud)
......但是我没有抓到任何东西.
我正在考虑使用调试输出语句来处理应用程序,但它是高度异步的,因此阅读这将是艰巨而乏味的.
所以告诉我,如果你能...我怎么开始计算WTF正在进行?
我们遇到以下情况,从单个域运行:
页面A用于window.open()
打开命名窗口(弹出播放器).window.open()
给页面A一个窗口的引用.
用户现在重新加载页面A.对命名窗口的引用将丢失.使用window.open()
"发现"窗口有重装它(不良)的不幸的副作用.有没有其他方法来获得对此窗口的引用?
我认为开发人员工具可以做到这一点,但我很难找到它.还有其他建议吗?
我们在objective-c中编写了一个iOS移动应用程序,它发布了我们的ASP.NET MVC服务器应用程序.在iPhone上,HTTP堆栈(和cookie等)似乎与Safari共享.这让我们对XSRF攻击持开放态度,所以除非我弄错了,否则我们需要使用防伪令牌来保护POST并保护我们的控制器方法ValidateAntiForgeryTokenAttribute
.
我将通过说我没有正确理解防伪标记生成和验证的机制来限定这个问题......特别是,在这种情况下使用的术语"随机数"有些神秘.
因为我们不向客户提供HTML @Html.AntiForgeryToken()
,所以我们不能使用该标准,因此我们必须使用AntiForgery.GetTokens
这些标记获取并将令牌分发给我们的客户.这有一个神秘的第一个参数:oldCookieToken
.目前,我只是设置它null
,一切似乎工作正常.那么任何人都可以告诉我......将旧令牌提供给令牌生成算法有什么用?如果我们的iOS应用程序只发出一个令牌并重复用于多个帖子,那么这会有问题吗?
我使用以下命令从我的数据库中选择了许多非聚集索引:
SELECT sys.objects.name tableName,
sys.indexes.name indexName
FROM sys.indexes
JOIN sys.objects ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.indexes.type_desc = 'NONCLUSTERED'
AND sys.objects.type_desc = 'USER_TABLE'
Run Code Online (Sandbox Code Playgroud)
我想在每个结果上运行以下命令:
ALTER INDEX indexName ON tableName DISABLE
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?有没有更好的办法?
编辑
我这样做是为了截断表,然后用"ALTER INDEX bla ON table REBUILD"重建.这需要自动化,因此丢弃和重建将是一个更高的维护活动,我宁愿避免.这是一个糟糕的计划吗?我需要一种以最小的开销清空表的方法.
假设我有一个(有序的)动物序列:
Eagle Elephant Tarantula Terrapin Tiger
我按第一封信分组:
Animals.GroupBy(animal => animal.First())
Run Code Online (Sandbox Code Playgroud)
IGrouping
结果序列中s 的元素是否与输入序列的顺序相同?
下面的代码循环遍历列表并获取值,但是我如何编写一个类似的语句来获取键和值
foreach (string value in list.Values)
{
Console.WriteLine(value);
}
Run Code Online (Sandbox Code Playgroud)
比如这样的事情
foreach (string value in list.Values)
{
Console.WriteLine(value);
Console.WriteLine(list.key);
}
Run Code Online (Sandbox Code Playgroud)
该列表的代码是:
SortedList<string, string> list = new SortedList<string, string>();
Run Code Online (Sandbox Code Playgroud) 我知道......我并没有真正使用TplDataflow来发挥它的最大潜力.ATM我只是BufferBlock
用作消息传递的安全队列,其中生产者和消费者以不同的速率运行.我看到一些奇怪的行为,让我难以理解如何继续.
private BufferBlock<object> messageQueue = new BufferBlock<object>();
public void Send(object message)
{
var accepted=messageQueue.Post(message);
logger.Info("Send message was called qlen = {0} accepted={1}",
messageQueue.Count,accepted);
}
public async Task<object> GetMessageAsync()
{
try
{
var m = await messageQueue.ReceiveAsync(TimeSpan.FromSeconds(30));
//despite messageQueue.Count>0 next line
//occasionally does not execute
logger.Info("message received");
//.......
}
catch(TimeoutException)
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中(它是2000行分布式解决方案的一部分),Send
每100ms左右定期调用一次.这意味着一个项目被Post
编到messageQueue
在约10次.这已经过验证.但是,偶尔看起来ReceiveAsync
在超时内没有完成(即Post
没有导致ReceiveAsync
完成)并且TimeoutException
在30秒后被提升.在这一点上,messageQueue.Count
是数百.这是出乎意料的.这个问题已经在较慢的发布率(1个帖子/秒)中观察到,并且通常在1000个项目通过之前发生BufferBlock
.
因此,要解决此问题,我使用以下代码,它可以工作,但偶尔会在接收时导致1秒延迟(由于上面发生的错误)
public async …
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×1
asp.net-mvc ×1
async-await ×1
csrf ×1
dataflow ×1
debugging ×1
group-by ×1
http-monitor ×1
ilookup ×1
indexing ×1
ios ×1
javascript ×1
linq ×1
locking ×1
postgresql ×1
sortedlist ×1
sql-server ×1
t-sql ×1
tpl-dataflow ×1
window.open ×1