小编Pat*_*ski的帖子

与PostgreSQL连接的良好技术

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个查询.

.net c# theory postgresql

6
推荐指数
2
解决办法
2960
查看次数

图像加载的性能

我已经尝试了几个小时的各种方法从文件加载图像.请看看这两种方法:

    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更安全?

c# image stream

5
推荐指数
1
解决办法
3387
查看次数

我应该使用 C# 中的什么只读、保留顺序的集合来支持枚举?

我对数据结构只有两个要求:

  • 只读,
  • 保留顺序(我想以特定顺序枚举它,总是)。

我知道这IReadOnlyList确实保留了秩序。我可以使用它,但我不需要索引。这意味着我应该使用IReadOnlyCollection. 不幸的是,我找不到它保持秩序的信息。

你知道吗?

c# readonly-collection

5
推荐指数
1
解决办法
1375
查看次数

用lambda和事件欺骗C#

我想弄清楚是否有办法完成这样的事情:

Button button = new Button() { OnClick += (sender, e) => MessageBox.Show("hello") };
Run Code Online (Sandbox Code Playgroud)

但它不想工作:DI想要创建一个控件并同时向它添加一个事件.可能吗?

c# events lambda

4
推荐指数
1
解决办法
196
查看次数

在C++中将字符串转换为向量

是否可以在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 };

我不想使用循环,我想写一个清晰简单的代码.(我知道下面会有一些循环).

字符串始终是一个数字.

c++ string vector

4
推荐指数
1
解决办法
353
查看次数

Web api - 如何使用 slugs 进行路由?

我希望能够解析像这个问题这样的链接:

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)

c# routes asp.net-web-api

4
推荐指数
1
解决办法
2848
查看次数

RandomNumberGenerator正确用法

我想使用安全的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每次使用新实例是否更安全?

c# random

4
推荐指数
1
解决办法
2059
查看次数

Json.NET 中的 JConstructor 和 JRaw

根据StackOverflow 上的这个答案:

Json.NET 包含许多不属于 JSON 规范的功能。特别是,它允许解析一些“正式”无效的 JSON 文件。这包括未加引号的属性、注释、构造函数等。

这些是可从 分配的所有类型JToken

JArray
JConstructor
JContainer
JObject
JProperty
JRaw
JValue
Run Code Online (Sandbox Code Playgroud)

请告知以下内容是否属实:

  1. JToken.Parse(json)“正式”有效的 json不可能在其后代中包含JConstructoror JRaw

  2. 假设 json 是“正式”有效的,那么人们只能期望在这些后代中看到以下类型:JArray, JObject, JProperty, JValue

c# json types json.net

4
推荐指数
1
解决办法
3242
查看次数

ConcurrentDictionary + Lazy - 实例化只会发生一次吗?

脚本

假设我们有:

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()最多只能调用一次.

我个人有一种印象,认为这是错误的.真相是什么?

c# concurrency .net-core

4
推荐指数
1
解决办法
206
查看次数

C#中快速高效的迭代器

我有一个单词集合,并希望为每个单词分配一个唯一的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)

问题是:

  1. 这是一个好方法吗?它在性能方面是否有效?
  2. 在简单性(清晰代码)方面有更好的方法吗?

c# linq

3
推荐指数
1
解决办法
81
查看次数