小编Fel*_*oto的帖子

为什么我们需要Thread.MemoryBarrier()?

在"C#4 in a Nutshell"中,作者表明这个类有时可以写0 MemoryBarrier但是我无法在我的Core2Duo中重现:

public class Foo
{
    int _answer;
    bool _complete;
    public void A()
    {
        _answer = 123;
        //Thread.MemoryBarrier();    // Barrier 1
        _complete = true;
        //Thread.MemoryBarrier();    // Barrier 2
    }
    public void B()
    {
        //Thread.MemoryBarrier();    // Barrier 3
        if (_complete)
        {
            //Thread.MemoryBarrier();       // Barrier 4
            Console.WriteLine(_answer);
        }
    }
}

private static void ThreadInverteOrdemComandos()
{
    Foo obj = new Foo();

    Task.Factory.StartNew(obj.A);
    Task.Factory.StartNew(obj.B);

    Thread.Sleep(10);
}
Run Code Online (Sandbox Code Playgroud)

这种需要对我来说似乎很疯狂.如何识别出现这种情况的所有可能情况?我认为如果处理器改变了操作顺序,它需要保证行为不会改变.

你还懒得使用障碍吗?

.net c# multithreading thread-safety memory-barriers

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

定义MenuItem快捷方式

我需要一种简单的方法来设置菜单项的快捷方式.

但这不适用于快捷方式,只需点击:

<MenuItem Header="Editar">
    <MenuItem Header="Procurar" Name="MenuProcurar"
              InputGestureText="Ctrl+F"
              Click="MenuProcurar_Click">
        <MenuItem.ToolTip>
            <ToolTip>
                Procurar
            </ToolTip>
        </MenuItem.ToolTip>
    </MenuItem>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)

我正在使用WPF 4.0

wpf keyboard-shortcuts

47
推荐指数
5
解决办法
6万
查看次数

强制IIS Express到经典管道模式

如何强制IIS Express以经典模式运行?我需要这个配置保留.csproj,一旦这个文件说明一个项目应该用IIS Express打开.

asp.net iis visual-studio iis-express

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

递归删除属性

Tortoise SVN可以选择将属性递归地应用于所有子文件夹/子文件.现在我需要删除此属性.我怎么能递归地做到这一点?

svn tortoisesvn

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

我应该在ASP.NET MVC 4上使用AsyncController吗?

这个类有这样的描述:

Provided for backward compatibility with ASP.NET MVC 3.
Run Code Online (Sandbox Code Playgroud)

而来源只是:

public abstract class AsyncController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)

我在MSDN上找不到关于弃用此类的任何文档.我应该将AsyncController的使用替换为Controller吗?

asp.net-mvc asynchronous async-await asp.net-mvc-4

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

SmtpClient.SendAsync阻止我的ASP.NET MVC请求

我有一个发送简单电子邮件的动作:

    [HttpPost, ActionName("Index")]
    public ActionResult IndexPost(ContactForm contactForm)
    {
        if (ModelState.IsValid)
        {
            new EmailService().SendAsync(contactForm.Email, contactForm.Name, contactForm.Subject, contactForm.Body, true);

            return RedirectToAction(MVC.Contact.Success());
        }
        return View(contactForm);
    }
Run Code Online (Sandbox Code Playgroud)

和电子邮件服务:

    public void SendAsync(string fromEmail, string fromName, string subject, string body, bool isBodyHtml)
    {
        MailMessage mailMessage....
        ....
        SmtpClient client = new SmtpClient(settingRepository.SmtpAddress, settingRepository.SmtpPort);

        client.EnableSsl = settingRepository.SmtpSsl;
        client.Credentials = new NetworkCredential(settingRepository.SmtpUserName, settingRepository.SmtpPassword);
        client.SendCompleted += client_SendCompleted;
        client.SendAsync(mailMessage, Tuple.Create(client, mailMessage));
    }

    private void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        Tuple<SmtpClient, MailMessage> data = (Tuple<SmtpClient, MailMessage>)e.UserState;
        data.Item1.Dispose();
        data.Item2.Dispose();

        if (e.Error != null) …
Run Code Online (Sandbox Code Playgroud)

email smtp smtpclient asp.net-mvc-3

23
推荐指数
2
解决办法
7329
查看次数

从EF select返回元组

如何使用EF4在Select中检索元组?

        var productCount = (from product in context.products
                    select new Tuple<Product, int>(product, products.Orders.Count));
Run Code Online (Sandbox Code Playgroud)

要么

        var productCount = (from product in context.products
                    select Tuple.Create(product, products.Orders.Count));
Run Code Online (Sandbox Code Playgroud)

实体框架说第一种情况不能使用空构造函数,而第二种情况则不能识别Tuple.Create方法.

.net c# linq-to-entities entity-framework

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

File.ReadLines没有锁定它?

我可以打开一个FileStream

new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)

没有锁定文件.

我可以这样做File.ReadLines(string path)吗?

c# io file stream filestream

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

获取MethodCallExpression的参数值

如何获取MethodCallExpression的参数值?

今天我这样做,但速度不够快:

private static object GetArgumentValue(Expression element)
{
    LambdaExpression l = Expression.Lambda(Expression.Convert(element, element.Type));
    return l.Compile().DynamicInvoke();
}
Run Code Online (Sandbox Code Playgroud)

这个方法从Expression获取值,但是如果我知道Expression总是来自MethodCallExpression.Arguments,我可以优化它吗?

我想我可以改变第一线,但我不知道如果适用于所有情况:

LambdaExpression l = Expression.Lambda(element);
Run Code Online (Sandbox Code Playgroud)

c# lambda expression-trees

13
推荐指数
1
解决办法
5145
查看次数

懒惰加载真的很糟糕吗?

我听说很多关于延迟加载的性能问题,无论是在NHibernate,Linq ....

问题是N + 1选择.例如,我想要所有帖子及其用户,在foreach我懒惰加载用户,他们需要一个选择帖子,加上N选择每个用户.

延迟加载:

1 - select ....from post
N -select ....from user

"好"的方法是加入:

1 - select .....from post inner join user on post.UserId = user.Id

但是看到EF生成SQL,我意识到浪费了很多数据.想象一下,所有帖子都是同一个用户.内部联接将为每个帖子行带来所有用户列.

在性能方面,哪种方法最好?

sql linq nhibernate entity-framework lazy-loading

12
推荐指数
2
解决办法
6415
查看次数