小编IAb*_*act的帖子

Tcp可靠性与Udp负载对于认真,高性能的服务器

速度,优化和可扩展性是Udp和Tcp协议之间的典型比较.Tcp吹嘘可靠性有一点额外开销的缺点,但速度很好,非常好.一旦Tcp套接字被实例化,保持套接字打开需要一些开销.但与Udp所描述的负担相比,哪种协议实际上有更多的开销?我也听说过Tcp存在可扩展性问题......但是互联网(网页/服务器)在Tcp上运行 - 那么Tcp是什么阻碍了可扩展性呢?

好的...所以Udp不需要保持连接打开的开销.但是,它要求您编写额外的方法以确保所有数据包都到达那里,希望按照您希望它接收的顺序.如果未完整收到数据包,则必须告知客户端或服务器重新发送.此外,您还必须为部分数据包保留某种消息收集,重建部分消息,并在最终处理消息之前检查完整的消息.更不用说如果消息的第二部分永远不会成功,你必须要么重新发送整个内容,要么重新发送我们缺少的部分,或者其他什么.

基本上,我的问题是:

  1. 为什么我会选择Udp over Tcp作为一个严肃的高性能服务器,增加了消息检查和手动ACK的"开销"与连续流的"开销"?
  2. 如果Tcp对于魔兽世界来说足够好,为什么Tcp不被广泛接受作为游戏服务器使用协议?

注意:我不反对为服务器实现Udp选项.我们在.Net 3.5框架上使用C#.所以我也对处理Udp 负担的最佳实践感兴趣.我也在套接字级别使用异步方法,而不是使用TcpListener,TcpClient等.

c# sockets udp tcp .net-3.5

8
推荐指数
2
解决办法
5724
查看次数

无法在NUnit中加载程序集

似乎这应该是一个常见的问题,我希望通过快速谷歌搜索找到答案,但唉,我似乎无法找到答案.

我正在使用C#中的NUnit编写单元测试,以获取依赖于第三方库的方法,Newtonsoft.Json是特定的.

当我尝试从我的单元测试中调用该方法时,我会收到所有共同点

无法加载文件或程序集"Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"或其中一个依赖项.定位程序集的清单定义与程序集引用"异常不匹配.

单元测试和应用程序都使用完全相同的newtonsoft库,并且dll设置为在两个项目中复制本地.

似乎我错过了一些非常明显的东西,但我似乎无法克服这个问题.

.net c# nunit unit-testing json.net

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

是否有实现异步游戏引擎循环的最佳实践?

我已经实现了如下游戏引擎循环:

public static Boolean Start ( )
{
    if (hasBoard)
    {
        //  start engine on worker thread
        asyncTask = new AsyncResult ( stopEngine, asyncTask );
        isRunning = ThreadPool.QueueUserWorkItem ( startEngine, asyncTask );

        if (isRunning)
        {
            Console.WriteLine ( "[{0}] Engine started",
                DateTime.Now.ToString ( "hh:mm:ss" ) );
        }
        else
        {
            Console.WriteLine ( "[{0}] Engine failed to start",
                DateTime.Now.ToString ( "hh:mm:ss" ) );
        }
    }

    return isRunning;
}

public static void Stop ( )
{
    Console.WriteLine ( "[{0}] Engine stopping",
        DateTime.Now.ToString ( "hh:mm:ss" …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous game-loop

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

如何将DataReader映射到类属性并保持性能?

前言:

  1. 使用DbProviderFactories创建所有数据连接字符串,连接等.
  2. 代码是来自多个库的C#和VB.Net混合.

我正在将DbDataReader映射到实体并具有一些基准:

[0] retrieved 159180 records in 45135 ms
[1] retrieved 159180 records in 45008 ms
[2] retrieved 159180 records in 44814 ms
[3] retrieved 159180 records in 44987 ms
[4] retrieved 159180 records in 44914 ms
[5] retrieved 159180 records in 45224 ms
[6] retrieved 159180 records in 45829 ms
[7] retrieved 159180 records in 60762 ms
[8] retrieved 159180 records in 52128 ms
[9] retrieved 159180 records in 47982 ms  
Run Code Online (Sandbox Code Playgroud)

考虑到从Sql Server Management Studio查询只需要17秒,这是一个非常大的时间和极差.我的选择声明:

"SELECT*FROM tbl_MyTable" …

c# reflection datareader

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

如何从嵌套类List <T>获取展平列表?

我有一个使用这些相同例子的问题 - 这个问题集中在一个不同的问题上.鉴于以下课程:

   [XmlRoot]
   public class Family {

      [XmlElement]
      public List<Person> Person;
   }

   public class Person {

      [XmlAttribute("member")]
      public MemberType Member { get; set; }

      [XmlAttribute("id")]
      public int Id { get; set; }

      [XmlElement]
      public string Surname { get; set; }

      [XmlElement]
      public string Forename { get; set; }

      [XmlElement("Person")]
      public List<Person> People;
   }

   public enum MemberType {
      Father,
      Mother,
      Son,
      Daughter
   }
Run Code Online (Sandbox Code Playgroud)

如果Family有一个定义如下的方法:

public IEnumerable<Person> Find (Func<Person, bool> predicate) {
    //  how do I get …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects

7
推荐指数
2
解决办法
2968
查看次数

如何通过反射获取MethodInfo的基本方法,而不是属性和事件?

我正在对一个物体进行一些反思性的审讯.代码列出了构造函数,属性和方法.GetMethods( )返回属性访问器/ mutator方法和事件添加/删除方法.

我怎样才能得到基本的方法定义?

更新

.IsSpecialName  
Run Code Online (Sandbox Code Playgroud)

是有效财产.谢谢,@汉斯.

.net c# reflection

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

每个PUSH指令是否在x64上推送8个字节的倍数?

在x64上,每个PUSH指令是否会推送8个字节的倍数?如果没有,它会推动多少?

此外,每个函数参数消耗多少堆栈空间?

assembly x86-64 calling-convention

7
推荐指数
2
解决办法
3104
查看次数

如何构建动态命令对象?

我会尽量说清楚。

  1. 插件使用反射和2个的架构AttributeS和一个抽象类:
    PluginEntryAttribute(Targets.Assembly, typeof(MyPlugin))
    PluginImplAttribute(Targets.Class, ...)
    abstract class Plugin
  2. 命令通过接口和委托路由到插件:
    例如:public delegate TTarget Command<TTarget>(object obj);
  3. 使用扩展方法 withCommand<>作为目标,CommandRouter在正确的目标接口上执行委托:
    例如:
public static TResult Execute<TTarget, TResult>(this Command<TTarget> target, Func<TTarget, TResult> func) {
     return CommandRouter.Default.Execute(func);
}
Run Code Online (Sandbox Code Playgroud)

把这些放在一起,我有一个用命令委托硬编码的类,如下所示:

public class Repositories {
     public static Command<IDispatchingRepository> Dispatching = (o) => { return (IDispatchingRepository)o; };
     public static Command<IPositioningRepository> Positioning = (o) => { return (IPositioningRepository)o; };
     public static Command<ISchedulingRepository> Scheduling = (o) => { return (ISchedulingRepository)o; };
     public …
Run Code Online (Sandbox Code Playgroud)

c# delegates dynamic .net-core

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

在汇编中确定32/64位架构

我正在阅读这个问题,并想知道接受的答案是否也可能是确定架构的一种方法.例如,在asm中我可以将WORD推入堆栈然后检查SP.将新SP与旧SP进行比较:

Diff的4表示32位
Diff的8表示64位

我这个想法是否正确?

x86 assembly x86-64 32bit-64bit

6
推荐指数
1
解决办法
1855
查看次数

我应该将DateTimes作为Long(Ticks)存储在数据库中吗?

通过将DateTime值保存为long替代,可以使生活更轻松吗?使用null DateTime值时似乎总是存在问题,无论是存储还是检索 - null DateTimes,无效的DateTimes等总是很难处理.

简单地使用long数据类型是否可取,因为您始终可以从刻度线创建DateTime?

编辑:我使用SqlServer和MySql.SqlDateTime是.net的派生DateTime.有效DateTime的所有3个平台之间存在差异.你如何处理这些差异?

database datetime

6
推荐指数
2
解决办法
2559
查看次数