小编Joh*_*ers的帖子

.NET套接字与C++套接字的高性能

我的问题是与我的同事讨论C++与C#的争论.

我们已经实现了一个接收大量UDP流的服务器.此服务器使用异步套接字和使用完成端口的重叠I/O在C++中开发.我们使用5个完成端口和5个线程.该服务器可以轻松处理千兆网络上的500 Mbps吞吐量,而不会丢失数据包/错误(我们没有将测试推送到500 Mbps以上).

我们尝试在C#中重新实现相同类型的服务器,但我们无法达到相同的传入吞吐量.我们使用异步接收使用ReceiveAsync方法和池SocketAsyncEventArgs来避免为每个接收调用创建新对象的开销.每个SAEventArgs都有一个缓冲区设置,所以我们不需要为每次接收分配内存.该池非常非常大,因此我们可以排队超过100个接收请求.此服务器无法处理超过240 Mbps的传入吞吐量.超过该限制,我们在UDP流中丢失了一些数据包.

我的问题是:我应该期望使用C++套接字和C#套接字获得相同的性能吗?我的观点是,如果在.NET中正确管理内存,它应该是相同的性能.

附带问题:有人会知道一篇很好的文章/参考资料,解释.NET套接字如何使用I/O完成端口吗?

c# sockets io-completion-ports

45
推荐指数
2
解决办法
9717
查看次数

什么是PostgreSQL等效于SQL Server NVARCHAR?

如果我在Microsoft SQL Server数据库中有NVARCHAR(或NTEXT)数据类型的字段,那么PostgreSQL数据库中的等效数据类型是什么?

postgresql

44
推荐指数
4
解决办法
4万
查看次数

如何从互联网上获取DateTime?

如何使用C#从互联网或服务器获取当前日期和时间?我想时间如下:

public static DateTime GetNetworkTime (string ntpServer)
{
    IPAddress[] address = Dns.GetHostEntry(ntpServer).AddressList;

    if (address == null || address.Length == 0)
        throw new ArgumentException("Could not resolve ip address from '" + ntpServer + "'.", "ntpServer");

    IPEndPoint ep = new IPEndPoint(address[0], 123);
    return GetNetworkTime(ep);
}
Run Code Online (Sandbox Code Playgroud)

我正在传递服务器IP地址netServer,但它无法正常工作.

datetime c#-4.0

44
推荐指数
5
解决办法
7万
查看次数

使用非黑色背景颜色将透明PNG转换为JPG

我在.Net中使用System.Drawing.Image进行从png到jpeg的简单转换.我基本上只使用这两行代码:

Image img = Image.FromFile(filename);
img.Save(newFilename, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)

它工作正常,除了png文件由于alpha通道包含透明度.在这种情况下,转换的jpeg具有黑色背景.有没有办法让背景变白?

.net c# alpha-transparency image-conversion

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

IIS应用程序池PID

是否有人熟悉获取与进程ID关联的应用程序池的方法?我正在使用Win32_Process查询W3WP服务并返回PID现在我正在尝试获取与之关联的应用程序池.

.net iis pid application-pool

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

SQL Server Management Studio - 改进TSQL编码过程的技巧

我曾经在一个常见做法是使用Pair Programming的地方工作.我记得在共同编写代码时我们可以相互学习多少小事.随着时间的推移,提取新的快捷方式,代码片段等,显着提高了编写代码的效率.

自从我开始使用SQL Server以来,我一直独自离开.我通常会选择与其他人合作的最佳习惯,这是我现在无法做到的.

所以这是一个问题:

  • 有哪些使用SQL Server Management Studio有效编写TSQL代码的技巧?
  • 请保留2至3个事项/快捷方式的提示,您认为可以提高编码速度
  • 请保持在TSQL和SQL Server Management Studio 2005/2008的范围内如果该功能特定于Management Studio的版本,请指出:例如"仅适用于SQL Server 2008"

编辑:

我担心你可能会被你们中的一些人误解.我不是在寻找有关编写高效TSQL代码的技巧,而是寻求有关如何有效使用Management Studio来加快编码过程本身的建议.

我正在寻找的答案类型是:

  • 使用模板,
  • 键盘快捷键,
  • 使用IntelliSense插件等

基本上那些使编码体验更有效和愉快的小东西.

t-sql sql-server optimization keyboard-shortcuts

42
推荐指数
10
解决办法
10万
查看次数

重用SqlCommand?

我不确定这是否可行.

我目前正在开展一个大学项目,我有一个使用存储过程的函数.我想知道是否可以采用相同的SqlCommand实例并应用更新的参数在同一函数内再次调用存储过程.

让我说我的代码中有这样的东西:

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
myConn = new SqlConnection(myConStr);
myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); 
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@book_id", bookID);
myCommand.Parameters.AddWithValue("@user_id", userID);

try
{
    myConn.Open();
    myCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

是否可以更新MyCommand参数并再次调用存储过程?

.net c# sql-server

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

C#:具有明显性的事件添加/删除!=典型事件?

我已声明了一个通用事件处理程序

public delegate void EventHandler();
Run Code Online (Sandbox Code Playgroud)

我添加了扩展方法'RaiseEvent':

public static void RaiseEvent(this EventHandler self)        {
   if (self != null) self.Invoke();
}
Run Code Online (Sandbox Code Playgroud)

当我使用典型语法定义事件时

public event EventHandler TypicalEvent;
Run Code Online (Sandbox Code Playgroud)

然后我可以调用使用扩展方法没有问题:

TypicalEvent.RaiseEvent();
Run Code Online (Sandbox Code Playgroud)

但是当我使用显式添加/删除语法定义事件时

private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
   add { _explicitEvent += value; } 
   remove { _explicitEvent -= value; }
}
Run Code Online (Sandbox Code Playgroud)

那么使用显式添加/删除语法定义的事件上不存在扩展方法:

ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在活动上,看看它说的原因:

事件'ExplicitEvent'只能出现在+ =或 - =的左侧

为什么使用典型语法定义的事件与使用显式添加/删除语法定义的事件不同,以及为什么扩展方法不适用于后者?

编辑:我发现我可以直接使用私有事件处理程序解决它:

_explicitEvent.RaiseEvent();
Run Code Online (Sandbox Code Playgroud)

但我仍然不明白为什么我不能直接使用事件,就像使用典型语法定义的事件一样.也许有人可以开导我.

.net c# events

42
推荐指数
3
解决办法
4万
查看次数

Visual Studio 2010插件写作文章/教程?

有没有人知道一些关于为Visual Studio 2010编写插件/插件的好文章/教程?

.net vsx mef visual-studio-addins visual-studio-2010

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

为什么C#泛型不能像C++模板中那样从泛型类型参数中派生出来?

为什么C#泛型不能像C++模板中那样从泛型类型参数中派生出来?我的意思是我知道这是不可能的,因为CLR不支持这个,但为什么呢?

我知道C++模板和C#泛型之间的深刻差异 - 前者是编译时实体,必须在编译期间解析,而后者是一流的运行时实体.

不过,我没有看到的原因,为什么CLR的设计者并没有拿出一个方案,该方案将最终使CLR泛型类型从泛型类型参数的一个派生.毕竟,这将是非常有用的功能,我个人非常想念它.

编辑:

我想知道一个核心问题,解决这个问题会产生如此高的代价来实现这个功能,这个功能证明它还没有得到实施.例如,检查这个虚构的声明:

class C<T> : T
{
}
Run Code Online (Sandbox Code Playgroud)

正如Eric Lippert已经注意到" 如果T是一个结构怎么办?如果T是一个密封的类型怎么办?如果T是一个接口类型怎么办?如果T是C怎么办?如果T是从C语言中得到什么怎么办?"如果T是带抽象方法的抽象类型?如果T的可访问性低于C怎么办?如果T是System.ValueType怎么办?(你能否有一个继承自System.ValueType的非结构?)System.Delegate怎么样? System.Enum等等? "

正如埃里克继续说的那样," 那些是容易的,显而易见的 ".的确,他是对的.我感兴趣的是一个既不容易也不明显的问题的具体例子,这个问题很难解决.

.net c# generics clr

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