我Npgsql用来通过.NET访问PostgreSQL.我担心执行数据库连接的正确方法,因为在我看来,这是一个昂贵的操作,打开一个连接,然后每次我想执行一些事务时关闭它.
所以这是一般的想法:
public class PostgreSQL
{
private NpgsqlConnection conn; // <- one connection for this object, open all the time
public PostgreSQL(string connString)
{
conn = new NpgsqlConnection(connString);
conn.Open();
}
// ...here making some queries...
public void Close() => conn.Close(); // <- use this in the very end of the program
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有一个PostgreSQL类的实例连接.
我的问题:
这种方法对吗?或者我应该每次打开和关闭连接我想要进行交易 - 尽可能晚地打开并尽快关闭?
如果我每次都应该打开和关闭连接 - 我应该编写一个限制并发连接数量的队列吗?或者PostgreSQL将自己处理它 - 理论上,我可以打开200个连接,它会没问题.
请与我分享你的经历^^
编辑: 我将每秒运行100-200个查询.
我已经尝试了几个小时的各种方法从文件加载图像.请看看这两种方法:
public Image SlowLoad(string path)
{
return Image.FromFile(path);
}
public Image FastLoad(string path)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
return Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)
第二种方法比2倍快.我在这里错过了什么?为什么会这样?我简直不敢相信.NET开发人员无法使用我编写的方法更快地实现Image.FromFile.所以=>我错了.请告诉我在哪里.为什么第二种方法快2倍?我的代码完全正确吗?(线程安全等).也许Image.FromFile更安全?
我对数据结构只有两个要求:
我知道这IReadOnlyList确实保留了秩序。我可以使用它,但我不需要索引。这意味着我应该使用IReadOnlyCollection. 不幸的是,我找不到它保持秩序的信息。
你知道吗?
我想弄清楚是否有办法完成这样的事情:
Button button = new Button() { OnClick += (sender, e) => MessageBox.Show("hello") };
Run Code Online (Sandbox Code Playgroud)
但它不想工作:DI想要创建一个控件并同时向它添加一个事件.可能吗?
是否可以在C++中轻松地将字符串转换为向量?
string s = "12345"
vector<int>(s.begin(), s.end(), c => c - '0'); // something like that
Run Code Online (Sandbox Code Playgroud)
目标是有一个像int的向量 { 1, 2, 3, 4, 5 };
我不想使用循环,我想写一个清晰简单的代码.(我知道下面会有一些循环).
字符串始终是一个数字.
我希望能够解析像这个问题这样的链接:
http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs
Run Code Online (Sandbox Code Playgroud)
因此服务器上的路由只需忽略URL 的最后部分。作为使用这个问题的示例,如果有人输入这样的 URL,我如何正确实现路由,它会将我重定向到:
http://stackoverflow.com/questions/31223512
Run Code Online (Sandbox Code Playgroud) 我想使用安全的PRNG生成盐.我已经读过,最新和推荐的实现方法是创建一个RandomNumberGenerator实例GetBytes.但是,我不太确定应该遵循哪种方式:
// CODE 1
private static byte[] GenerateSaltNewInstance(int size)
{
using (var generator = RandomNumberGenerator.Create())
{
var salt = new byte[size];
generator.GetBytes(salt);
return salt;
}
}
// CODE 2
private static RandomNumberGenerator rng = RandomNumberGenerator.Create();
private static byte[] GenerateSaltStatic(int size)
{
var salt = new byte[size];
rng.GetBytes(salt);
return salt;
}
Run Code Online (Sandbox Code Playgroud)
有什么不同?基本上在这个方法的第一个版本中,我RandomNumberGenerator每次都在创建一个新的实例.在第二个我使用初始化一次的静态实例.
我应该选择哪一个?在文章中,我看到人们遵循第一条路径,但我不认为为什么创建RandomNumberGenerator10000次会更好:P每次使用新实例是否更安全?
根据StackOverflow 上的这个答案:
Json.NET 包含许多不属于 JSON 规范的功能。特别是,它允许解析一些“正式”无效的 JSON 文件。这包括未加引号的属性、注释、构造函数等。
这些是可从 分配的所有类型JToken:
JArray
JConstructor
JContainer
JObject
JProperty
JRaw
JValue
Run Code Online (Sandbox Code Playgroud)
请告知以下内容是否属实:
JToken.Parse(json)“正式”有效的 json不可能在其后代中包含JConstructoror JRaw。
假设 json 是“正式”有效的,那么人们只能期望在这些后代中看到以下类型:JArray, JObject, JProperty, JValue。
假设我们有:
var dictionary = new ConcurrentDictionary<string, Lazy<Heavy>>();
Run Code Online (Sandbox Code Playgroud)
实例化Heavy非常耗费资源.我们考虑一下这段代码:
return dictionary.GetOrAdd("key", key =>
{
return new Lazy<Heavy>(() =>
{
return Instantiate();
});
}).Value;
Run Code Online (Sandbox Code Playgroud)
该方法Instantiate()当然返回一个类型的实例Heavy.
对于给定的密钥,是否100%保证该方法最多Instantiate()只能被调用一次?
有些人声称拥有多个线程,我们只能创建多个实例Lazy<Heavy>,这非常便宜.实际方法Instantiate()最多只能调用一次.
我个人有一种印象,认为这是错误的.真相是什么?
我有一个单词集合,并希望为每个单词分配一个唯一的int值.我已经阅读了一段时间的LINQ并想出了这个:
var words = File.ReadAllLines(wordsFile);
var numbers = Enumerable.Range(1, words.Count());
var dict = words
.Zip(numbers, (w, n) => new { w, n })
.ToDictionary(i => i.w, i => i.n);
Run Code Online (Sandbox Code Playgroud)
问题是: