使用async / await模式在C#5中编写高度可伸缩的TCP / IP服务器?

我的任务是设计一个相当简单的TCP / IP服务器,它必须接受来自多个客户端的连接。 它需要用C#编写,我使用的是.NET 4.5。 也就是说,我不确定.NET 4.5中TCP / IP服务器/客户端可扩展性的当前“最先进”是什么。 我确实看到了这篇文章: 如何编写可扩展的基于Tcp / Ip的服务器 。 但这与.NET 2.0和3.5有关,并没有提到async / await模式。 我能够用“旧方式”编写服务器……但我想知道“新方式”是什么。 在Socket,TcpClient或TcpListener上使用新的Async方法在C#中创建可伸缩服务器的最佳方法是什么? 新的Async方法是否利用I / O完成端口? 滚动自己的Socket监听器是否更有效,或者TcpListener / TcpClient类现在相当不错? 编辑:其他问题。

委托.BeginInvoke和在C#中使用ThreadPool线程之间的区别

在C#中,使用委托异步地执行某些工作(调用BeginInvoke())和使用ThreadPool线程之间有任何区别,如下所示 public void asynchronousWork(object num) { //asynchronous work to be done Console.WriteLine(num); } public void test() { Action myCustomDelegate = this.asynchronousWork; int x = 7; //Using Delegate myCustomDelegate.BeginInvoke(7, null, null); //Using Threadpool ThreadPool.QueueUserWorkItem(new WaitCallback(asynchronousWork), 7); Thread.Sleep(2000); } 编辑: BeginInvoke确保线程池中的线程用于执行异步代码,所以有什么区别吗?

使用WPF绘制数千个数据点的最佳方式?

我写了一个显示财务数据的图表。 当我使用PathGeometry以及PathFigure和LineSegment绘制不到10.000个点作为连接线时,性能很好。 但是现在我需要同时显示多达100.000点(没有滚动)并且已经非常慢,只有50.000点。 我在考虑StreamGeometry ,但我不确定,因为它与PathGeometry基本相同,它将信息作为字节流进行处理。 有没有人有想法让这更高效,或者有人甚至做过类似的事情? 编辑:这些数据点一旦绘制就不会改变,所以如果有潜在的优化,请告诉我(线段现在被冻结)。 编辑:我试过StreamGeometry。 由于某些原因,创建图形的时间更长,但这不是问题。 绘制所有点后在图表上绘制仍然与前一个方法一样慢。 我认为WPF处理的数据点太多了。 编辑:我已经进行了一些实验,我注意到通过将先前为double的坐标转换为int来改善性能,以防止WPF抗锯齿子像素线。 编辑:感谢所有建议减少线段数的回复。 对于阶梯线,我将它们降低到最多两倍的水平分辨率,对于简单的线条,最多将它们降低到水平分辨率,现在性能非常好。

用于家庭开发的免费云数据库服务

是否有基于云的免费数据库服务,我可以用于asp.net应用程序(在线托管而不是在我自己的服务器上)和winform桌面应用程序(在我的电脑上运行)。 我想使用一个,以便两个应用程序可以使用相同的数据库。 SQL Azure看起来是一个很好的解决方案,但没有免费选项。

无法阅读其他应用程序的标题

跳跃我将如何在我的主程序中找到窗口句柄… 在C#中 我运行notepad.exe然后在其中键入内容,然后使用SPY ++(0x111111)找到主窗口句柄,并且 [DllImport(“user32.dll”, SetLastError = true, CharSet = CharSet.Auto)] internal static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount); . . . GetWindowText((IntPtr)(0x111111), str, 1024); 这段代码工作正常,并返回主窗口的标题。 ::但是当我做同样的事情来找到notepad.exe的孩子的标题时,它只是将str设置为空。 间谍++告诉我孩子的标题有价值。

n层应用程序中的exception处理?

在分层应用程序中处理exception的建议方法或最佳实践是什么? 你应该在哪里放置try/catch块? 你应该在哪里实施记录? 是否有建议的模式来管理n层应用程序中的exception? 考虑一个简单的例子。 假设您有一个调用业务层的UI,它调用数据层: //UI protected void ButtonClick_GetObject(object sender, EventArgs e) { try { MyObj obj = Business.GetObj(); } catch (Exception ex) { Logger.Log(ex); //should the logging happen here, or at source? MessageBox.Show(“An error occurred”); } } //Business public MyObj GetObj() { //is this try/catch block redundant? try { MyObj obj = DAL.GetObj(); […]

在对象上实现更改跟踪的最佳方法是什么

我有一个包含5个属性的类。 如果任何值被分配给这些字段中的任何一个,则另一个值(例如IsDIrty)将改变为真。 public class Class1 { bool IsDIrty {get;set;} string Prop1 {get;set;} string Prop2 {get;set;} string Prop3 {get;set;} string Prop4 {get;set;} string Prop5 {get;set;} }

从byte 显示图像

我用C#,wpf。 我有一个图像,它以以下forms存储: byte [] public interface IFile { int Id { get; set; } byte[] FileData { get; set; } string FileName { get; set; } int? FileSize { get; set; } string FileExtension { get; set; } } 如何在表单上显示我的图像(FileData byte [] )? 如果我从byte []创建临时文件,我必须在Source=”…”写入?

owin认证的当前用户

我开始为移动应用程序构建一个web api,并且我很难实现身份validation。 我使用Bearer,虽然一切都应该没问题,但我无法让当前用户从控制器中获取动作。 HttpContext.Current.User.Identity.Name为null(同样是HttpContext.Current.User.Identity.GetUserId())的结果。 以下是重要代码: Startup.cs: public partial class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); ConfigureAuth(app); WebApiConfig.Register(config); app.UseWebApi(config); } } Startup.Auth.cs public partial class Startup { static Startup() { OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString(“/token”), Provider = new ApplicationOAuthProvider(), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), AllowInsecureHttp = true }; […]

UserControl上的DataGrid不显示绑定的ObservableCollection

我有一个带有一些加载集合的按钮的MainWindow: 然后我有一个UserControl,它应该显示已加载的集合,但什么都不显示。 这里我如何将数据放入集合中(如果我调试,值就在那里): Application.Current.Dispatcher.Invoke(() => MainWindowViewModel.ResultViewModel.Model.Collections.Add(Collection)); Collections是ObservableCollection 的类型; 似乎我在绑定中缺少一些东西,但我对WPF和MVVM很新,我找不到它。 我已经阅读了有关DependencyProperty但我想为我的userControl创建一个ViewModel,因为它最终会变得更加复杂。 我真的很感激任何帮助。