我正在审查另一个开发人员的代码,他已经编写了很多类级变量的代码,类似于以下内容:
/// <summary>
/// how often to check for messages
/// </summary>
private int CheckForMessagesMilliSeconds { get; set; }
/// <summary>
/// application path
/// </summary>
private string AppPath { get; set; }
Run Code Online (Sandbox Code Playgroud)
不这样编码会增加不必要的开销,因为变量是私有的吗?
我不是在考虑私有变量需要这种编码模式的情况吗?
给定一个包含三列的表
我正在尝试编写单个SQL INSERT INTO语句,该语句将具有一个GroupID的每一行的副本复制到新的GroupID中.
示例开始表:
ID | GroupID | SomeValue
------------------------
1 | 1 | a
2 | 1 | b
Run Code Online (Sandbox Code Playgroud)
我运行一个简单的INSERT INTO语句后的目标:
ID | GroupID | SomeValue
------------------------
1 | 1 | a
2 | 1 | b
3 | 2 | a
4 | 2 | b
Run Code Online (Sandbox Code Playgroud)
我以为我可以这样做:
INSERT INTO MyTable
( [ID]
,[GroupID]
,[SomeValue]
)
(
SELECT (SELECT MAX(ID) + 1 FROM MyTable)
,@NewGroupID
,[SomeValue]
FROM MyTable
WHERE ID = @OriginalGroupID
)
Run Code Online (Sandbox Code Playgroud)
这会导致PrimaryKey违规,因为它最终会多次重复使用相同的Max(ID)+1值.
我是否只能在T-SQL …
给定一个表示分层树结构并具有三列的表
我知道该分支中节点最低的节点,我想将其复制到具有相同数量的父节点的新分支,这些父节点也需要克隆.
我正在尝试编写单个SQL INSERT INTO语句,该语句将使具有相同main的每一行的副本成为新GroupID的第一部分GroupID.
示例开始表:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
Run Code Online (Sandbox Code Playgroud)
我运行一个简单的INSERT INTO语句后的目标:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
4 | -1 | a-cloned
5 | 4 | b-cloned
6 | 5 | c-cloned
Run Code Online (Sandbox Code Playgroud)
最终的树结构
+--a (1)
| +--b (2)
| +--c (3)
|
+--a-cloned (4) …Run Code Online (Sandbox Code Playgroud) 我有一个用.NET 4编写的Windows服务,它创建了包含无限运行while(运行)循环的多个线程.当我停止服务时,运行的布尔值变为false,我们打破了while循环,一旦每个线程都这样做,服务终于停止了.
在while内部,它调用oMessageReceiver.Receive(TimeSpan.FromSeconds(30)).因此,有时当我尝试停止服务时,我必须等待30秒才能使Receive()进程超时.
一种选择是将超时从30秒降低到更小.我不确定它会产生什么性能损失,但是由于没有BrokeredMessage这个过程没有做任何工作,所以我真的希望尽可能经常地让听众保持开放状态.
我看到MessageReceiver上有一个.BeginReceive()方法.我有一种感觉,我可以在这里使用的编程模式可以防止我的服务在我等待接收超时时挂起.任何人都可以描述如何在无限运行的Windows服务中使用Begin/End APM功能吗?
我有一个模型对象,我将其发送到浏览器并返回给我。我希望对该对象中的 ID 值进行加密。我创建了一个自定义 JsonConverter 来加密字符串然后解密。
public class SecretItem
{
[JsonConverter(typeof(EncryptedIdConverter))]
public string Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的 EncryptedIdConverter 类
class EncryptedIdConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
string encryptedValue = (string)value;
if (!string.IsNullOrWhiteSpace(encryptedValue))
encryptedValue = Encryption.EncryptString(encryptedValue);
serializer.Serialize(writer, encryptedValue);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string decryptedString = (string)reader.Value;
if (!string.IsNullOrWhiteSpace(decryptedString))
decryptedString = Encryption.DecryptString(decryptedString);
return decryptedString;
}
public …Run Code Online (Sandbox Code Playgroud) 请求/响应模式涉及向代理发送消息,其中 Reply 属性设置为 QueueName,以向接收者指示返回路径使用的内容。
我看过的所有幻灯片都将回复队列显示为单个频道。当另一端的侦听器知道如何在该队列上正确地代理回复消息时,这可以正常工作。但是,这会使处理无序接收的消息更加痛苦。
我见过为每条发送的消息构建一个新的唯一队列的代码,用于发送回复。然后在接收者发回回复后,原始发送者将回复从队列中取出并删除队列。这似乎可能是很多临时队列的创建/销毁。
我见过的另一个选项是创建一个单一的回复频道作为主题,然后每个原始发件人在该主题上创建一个新订阅,该订阅针对相关性 ID == 发送者 ID 进行过滤。然后当原始发件人收到该回复时,他们会删除该订阅。但是,这似乎又是很多设置/拆卸,只是为了接收消息回复。
c# ×3
.net ×2
servicebus ×2
sql ×2
t-sql ×2
asynchronous ×1
conventions ×1
json.net ×1
sql-server ×1