小编Bor*_*ode的帖子

Singleton实现与静态构造函数的懒惰

乔恩斯基特建议在他的单身执行,如果你需要为你的最大的懒惰单身,你应该添加静态构造函数,这将使编译器标记类型beforefieldinit.

但是,我做了一些测试,如果没有 beforefieldinit ,它似乎更懒.

代码示例(私有构造函数调用输出到控制台并验证字段是否已初始化:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    public static string Stub()
    {
        return "123";
    }

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    //static Singleton()
    //{
    //}
    private Singleton()
    {
        Console.WriteLine("private ctor");
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用Singleton.Stub()时,私有构造函数没有被命中,当我取消注释静态构造函数时,总是调用私有构造函数.

这是我可以跟踪静态构造函数的唯一区别.

在我尝试理解beforefieldinit之间的区别时,我也读过Skeet 在这篇文章中的答案,尝试将false传递给DoSomething() - 无论是否有静态构造函数,私有构造函数都没有被调用.

public static void …
Run Code Online (Sandbox Code Playgroud)

c# singleton static-constructor

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

Visual Studio - 如何将默认构建配置更改为发布?

每当我在 VS 2010 中打开一个新的(Web)项目时,默认构建配置都会设置为“活动(调试)”。我在某处读到,如果我将这样的项目上传到服务器,会对性能产生轻微影响(这是真的吗?),所以我必须手动转到属性并在构建选项卡中更改它以发布。有没有办法告诉 VS 2010 在“发布”配置中打开每个新项目?

debugging configuration default release visual-studio-2010

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

我应该处置 FileUpload.PostedFile.InputStream 吗?

是否需要此代码,或者因为页面的 UnLoad 事件会处置页面上的所有控件,所以编写此类代码是没有意义的:

fu.PostedFile.InputStream.Flush();
fu.PostedFile.InputStream.Close();
fu.FileContent.Dispose();    
Run Code Online (Sandbox Code Playgroud)

我问这个问题是因为在msdn的示例中我看到他们编写的代码如下

FileUpload1.SaveAs(savePath);
Run Code Online (Sandbox Code Playgroud)

但之后不要费心处理流,但我看到有些人在保存后明确处理输入流?

c# asp.net dispose webforms file-upload

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

TPL Dataflow与普通的Semaphore

我需要制作可扩展的流程.该进程主要具有I/O操作和一些次要CPU操作(主要是反序列化字符串).该进程在数据库中查询url列表,然后从这些url中获取数据,将下载的数据deserilize到对象,然后将一些数据保存到crm动态以及另一个数据库中.之后我需要更新第一个处理网址的数据库.部分要求是使并行度可配置.

最初我想通过一系列任务实现它,等待并使用Semaphore限制并行性 - 非常简单.然后我读了@Stephen Cleary的一些帖子和答案,建议使用TPL Dataflow,我认为它可能是一个很好的候选人.但是,我想通过使用Dataflow来确保我使代码"复杂化",这是值得的.我也有一个建议使用ForEachAsync扩展方法也很简单,但是我不确定它是否会因为它对集合进行分区而导致内存开销.

TPL Dataflow是否适合这种情况?它如何比Semaphore或ForEachAsync方法更好 - 如果我通过TPL DataFlow在每个其他选项(Semaphore/ForEachASync)上实现它,我将获得什么好处?

semaphore dataflow task task-parallel-library tpl-dataflow

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

迭代datagridview列并更改列标题

如何动态重命名datagridview的列标题?

到现在为止我使用了这段代码:

dataGridView1.Columns[0].HeaderText = "my_title";
Run Code Online (Sandbox Code Playgroud)

问题是Columns [0]可能会随着时间而改变..

如何迭代所有列标题并执行类似操作

if (Column.HeaderText=="customer_id") {Column.HeaderText="my_title"} ?
Run Code Online (Sandbox Code Playgroud)

c# datagridview winforms

2
推荐指数
1
解决办法
2万
查看次数

如何在lambda中使用async/await

如何在lambda表达式中正确使用async/await关键字?这是代码:

public async Task<IHttpActionResult> GetUsers() {

        var query = await _db.Users.ToListAsync();

        var users = query.Select(async u =>  new
        {
            FirstName = u.FirstName,
            LastName = u.LastName,
            IsGeek = await _userManager.IsInRoleAsync(u.Id, "Geek")
        });

        return Ok(users);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,此代码在webapi控制器中运行,它编译时没有任何错误,问题是它需要额外的 await某处,因为此操作永远不会返回.

请注意,_db并且_usermanager是应用程序的DbContextUserManager.

谢谢.

更新:

这个等效的代码永远不会失败(但它不是优雅的:():

var query = await _db.Users.ToListAsync();
var users = new List<object>();
foreach (var u in query)
{
     bool IsGeek = await _userManager.IsInRoleAsync(u.Id, "IsGeek");
     users.Add( new {
         FirstName = u.FirstName,
         LastName …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda async-await asp.net-web-api

2
推荐指数
1
解决办法
3390
查看次数

用实体框架进行sql查询

如果我使用实体框架进行连接,我怎样才能在sql语言中使用sql查询?我从这篇文章中了解到,ObjectContext.ExecuteStoreQuery无济于事,因为它只适用于某些查询(不是1:1到sql语言).

提到的另一个选项是使用ObjectContext.Connection并从那里编写"经典"ADO.NET代码,但我无法弄清楚如何.

有人可以写一个非常简单的代码示例如何执行简单的查询,如

select MAX(customer_id) from Customers 
Run Code Online (Sandbox Code Playgroud)

与实体框架?我知道Linq-To-Sql存在,但我更喜欢使用sql语言,它看起来更简单,我对它更熟悉.

sql ado.net entity-framework linq-to-sql objectcontext

0
推荐指数
1
解决办法
1万
查看次数