小编Isa*_*avo的帖子

WPF中的StaticResource和DynamicResource有什么区别?

在WPF中使用画笔,模板和样式等资源时,可以将它们指定为StaticResources

<Rectangle Fill="{StaticResource MyBrush}" />
Run Code Online (Sandbox Code Playgroud)

或者作为DynamicResource

<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}"  />
Run Code Online (Sandbox Code Playgroud)

大多数时候(总是?),只有一个工作,另一个将在运行时抛出异常.但我想知道原因:

  • 主要区别是什么?像记忆或性能影响
  • WPF中的规则是"画笔总是静态的"和"模板总是动态的"等吗?

假设静态与动态之间的选择并不像看起来那么随意......但我没有看到模式.

.net wpf resources xaml

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

WPF Dispatcher的InvokeAsync和BeginInvoke之间有什么区别

我注意到在.NET 4.5中,WPF Dispatcher获得了一组新的方法来在Dispatcher的线程上执行名为InvokeAsync的东西.之前,.NET 4.5我们有InvokeBeginInvoke,它们分别同步和异步处理这个.

除了命名和稍微不同的重载外,这些BeginInvokeInvokeAsync方法之间是否有任何重大差异?

哦,我已经检查了,两者都可以await编辑:

private async Task RunStuffOnUiThread(Action action)
{
    // both of these works fine
    await dispatcher.BeginInvoke(action);
    await dispatcher.InvokeAsync(action);
}
Run Code Online (Sandbox Code Playgroud)

c# wpf async-await .net-4.5

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

为什么接口实现不能返回更具体的类型?

如果接口指定了返回另一个接口的属性或方法,为什么第一个接口的实现不允许将返回类型"更改"为更具体的类型?

我们举一个例子来说明:

interface IFoo
{
    IBar GetBar();
}
interface IBar
{ }

class Foo : IFoo
{
    // This is illegal, we are not implementing IFoo properly
    public Bar GetBar()
    {
        return new Bar();
    }
}

class Bar : IBar
{ }
Run Code Online (Sandbox Code Playgroud)

我知道如何让它发挥作用,这不是我关心的问题.

我可以:

  • 将返回类型更改GetFoo()IBar,或
  • 显式实现接口,只需GetBarIFoo.GetBar()方法调用即可

我真正要问的是不仅允许上面的代码编译的原因.是否有上述情况不符合规定的合同IFoo.

c# overloading language-design interface

31
推荐指数
2
解决办法
2562
查看次数

将IDictionary转换为Dictionary

我必须转换System.Collections.Generic.IDictionary<string, decimal>System.Collections.Generic.Dictionary<string, decimal>,而我不能.我尝试了ToDictionary方法,无法指定正确的参数.

我尝试过以下方法:

// my dictionary is PlannedSurfaces (of type IDictionary<string, decimal>)
blabla.ToDictionary<string, decimal>(localConstruction.PlannedSurfaces) 
Run Code Online (Sandbox Code Playgroud)

c# generics dictionary

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

如何同时从多个线程访问MySQL

我们正在做一个MySQL的小基准测试,我们希望看看它对我们的数据的执行情况.

该测试的一部分是看多个并发线程在服务器上使用各种查询进行操作时的工作原理.

MySQL文档(5.0)是不是多线程的客户真的清楚.我应该指出我确实链接了线程安全库(libmysqlclient_r.so)

我正在使用预准备语句并执行read(SELECT)和write(UPDATE,INSERT,DELETE).

  • 我应该为每个线程打开一个连接吗?如果是这样的话:我怎么做到这一点..它似乎mysql_real_connect()返回我打电话时得到的原始数据库句柄mysql_init())
  • 如果不是:我如何确保结果和方法,如mysql_affected_rows返回正确的值而不是与其他线程的调用冲突(互斥/锁可能工作,但感觉不对)

c c++ mysql multithreading connection-pooling

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

低延迟/高性能网络(以太网)消息传递

背景

我想创建一个测试应用程序来测试不同系统的网络性能.为此,我计划让该机器通过专用(非繁忙)网络将以太网帧发送到另一台机器(或设备),该机器只接收该消息并将其发回.发送应用程序将记录总往返时间(以及其他内容).

测试的目的是了解特定系统(OS +组件等)在网络流量方面的表现.这在下图中显示为机器A. 请注意,我对网络基础设施(交换机,电缆等)的性能不感兴趣 - 我正在尝试测试机器A内的网络流量的性能(即从它到达网卡到达用户空间的时候)

我们将(尝试)测量所有类型的东西,一件事是消息的总往返,还有机器A的中断延迟,一般驱动程序开销等等.机器A将是一个实时系统.但是为了支持这些测试,我需要一个可以反弹消息的独立机器,并以其他方式为测试系统添加网络刺激.这个单独的机器是下图中的机器B,这个问题是关于什么的.

我的测试系统概述

我的问题

我想开发一个应用程序,它可以接收和返回这些消息,并尽可能保持一致(最好是低)延迟.我希望至少在几微秒内得到一致的延迟.为简单起见,我想在Windows或Linux等通用操作系统上执行此操作,但我愿意接受其他建议.除操作系统和我的测试应用程序外,机器上不会有其他负载(CPU或其他).

我想到了以下方法:

  • 在具有高优先级的用户空间中运行的普通应用程序
  • 在内核空间中运行的线程,以避免用户空间/内核空间转换
  • 已经做到这一点的现成设备(我还没有找到一个)

问题

是否还有其他方法或框架可以做到这一点?还需要考虑什么才能获得一致且低延迟?建议采用什么方法?

linux windows performance network-programming

10
推荐指数
1
解决办法
2035
查看次数

为什么我必须在调用构造函数时将lambda捕获到字段变量

最近我对lambda表达式和变量捕获有点奇怪.代码是使用.NET 4.5(VS2012)的WPF/MVVM应用程序.我正在使用我的viewmodel的不同构造函数来设置a的回调RelayCommand(此命令将绑定到我视图中的菜单项)

实质上,我有以下代码:

public class MyViewModel : ViewModelBase
{
    public MyViewModel(Action menuCallback)
    {
        MyCommand = new RelayCommand(menuCallback);
    }

    public MyViewModel(Func<ViewModelBase> viewModelCreator)
    // I also tried calling the other constructor, but the result was the same
    //  : this(() => SetMainContent(viewModelCreator())
    {
        Action action = () => SetMainContent(viewModelCreator());
        MyCommand = new RelayCommand(action);
    }

    public ICommand MyCommand { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法创建上述实例:

// From some other viewmodel's code:
new MyViewModel(() => new SomeViewModel());
new MyViewModel(() => new SomeOtherViewModel()); …
Run Code Online (Sandbox Code Playgroud)

c# wpf lambda closures

10
推荐指数
1
解决办法
446
查看次数

int和string中的装箱和拆箱

我在拳击和拆箱方面有点困惑.根据其定义

Boxing是ValueTypes到引用类型(Object)的隐式转换.
UnBoxing是将引用类型(Object)显式转换为其等效的ValueTypes.

描述这个的最好例子是

int i = 123; object o = i;  // boxing
Run Code Online (Sandbox Code Playgroud)

o = 123; i = (int)o;  // unboxing 
Run Code Online (Sandbox Code Playgroud)

但我的问题是int是否是值类型而字符串是引用类型

int i = 123; string s = i.ToString();
Run Code Online (Sandbox Code Playgroud)

s = "123"; i = (int)s; 
Run Code Online (Sandbox Code Playgroud)

这是拳击和拆箱的例子吗?

.net c# boxing types

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

从SQLite中的预准备语句中获取原始SQL查询

我正在使用来自C++应用程序的SQLite(3.6.4)(使用标准的C api).我的问题是:一旦查询已经准备好,使用sqlite3_prepare_v2()和绑定参数使用sqlite3_bind_xyz()- 是否有任何方法可以获得包含原始SQL查询的字符串?

原因是当出现问题时,我想打印查询(用于调试 - 这是一个内部开发人员只有测试应用程序).

例:

sqlite3_prepare_v2(db, "SELECT * FROM xyz WHERE something = ? AND somethingelse = ?", -1, &myQuery, NULL);
sqlite3_bind_text(myQuery, 1, mySomething);
sqlite3_bind_text(myQuery, 2, mySomethingElse);
// ....

// somewhere else, in another function perhaps
if (sqlite3_step(myQuery) != SQLITE_OK)
{
     // Here i'd like to print the actual query that failed - but I 
     // only have the myQuery variable
     exit(-1);
}
Run Code Online (Sandbox Code Playgroud)

奖励点如果它还可以打印出绑定的实际参数.:)

c++ sqlite

7
推荐指数
1
解决办法
7664
查看次数

是否有使用新的async/await功能编写.NET API的指南

我目前正在设计一些内部API,我使用Async CTP及其新await/ async关键字.

是否有关于如何设计这些API的指南或最佳实践?

特别:

  • 我应该提供同步和异步版本的方法吗?(即Task DoStuffAsync() void DoStuff()
  • 我公开的所有异步方法都应该是在表单中async Task<T> GetStuffAsync()(即方法名称的结尾Async)还是可以让某些名称 GetStuff()等待?

我明白这里不是全黑或白,而是取决于所讨论的方法,但我正在寻找一般指导方针.

.net c# api naming-conventions async-ctp

7
推荐指数
1
解决办法
979
查看次数