小编Geo*_*ope的帖子

我应该使用jMonkeyEngine 3(jME 3)还是Unity 4.3来教我的孩子们进行游戏编程?

我正在教我的孩子编程,看起来我已经把它缩小到两个选项:

  • jMonkeyEngine 3(jME 3)
  • Unity 4.3

我找不到任何"当前"的比较,所以我想我会问:

哪个更好的jME3 +或Unity4.3 +用于教学编程与引擎优势?

我不是游戏开发人员,但作为一名企业和控制系统开发人员,我在C#和Java方面都有经验.

我目前倾向于使用Unity4.3 +,因为:

  1. 从编程的角度来看,我认为C#比Java更干净,但如果引擎编码和对象模型鼓励编程不好,这意味着很少

  2. 引擎优势:Unity4.3 +将"据称"即将支持XBox One和PS4

注意:为了公平对待jME,我会记下jME的这个"pre-alpha state"iOS选项,它比营销"假设"更好:(http://hub.jmonkeyengine.org/wiki/doku.php/jme3:ios)

如果在所有其他方面它们相同,哪一个具有更好的服务集成?

language-features unity-game-engine jmonkeyengine

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

Serilog .ForContext 无法通过 service(/worker) 类使用

如何修复依赖项注入,以便可以.ForContext(...)在我的工作人员/服务类中进行访问?

[.Net Core 6 用于混合控制台/WindowsService 应用程序]

在我的主程序类和工作/服务类中,我让 Serilog 正确工作以进行基本日志记录...

程序.cs

Log.Information($"Application Directory: {baseDir}");
Run Code Online (Sandbox Code Playgroud)

工人.cs

_logger.LogInformation("Service Starting");
Run Code Online (Sandbox Code Playgroud)

服务A.cs

_logger.LogInformation("In Service A");
Run Code Online (Sandbox Code Playgroud)

然而,我遇到的问题是我需要 .ForContext 也能够在任何地方工作......并且它在我的主程序类中:

程序.cs

Log
   .ForContext("EventID", 42)
   .Information("Log This with EventID === 42");
Run Code Online (Sandbox Code Playgroud)

...但是,当我尝试在任一工作人员/服务类中执行相同操作时...

工人.cs

_logger
   .ForContext("EventID", 42)
   .Information("Log This with EventID === 42");
Run Code Online (Sandbox Code Playgroud)

...它不起作用,我收到以下错误:

错误CS1061

'ILogger<Worker>' does not contain a definition for 'ForContext' and no accessible extension method 'ForContext' accepting a first argument of type 'ILogger<Worker>' could be found
Run Code Online (Sandbox Code Playgroud)

...所以我对此进行了调查,并遇到了以下非常接近的问题(这两个问题我都无法应用,请参阅下面代码中的注释):

c# dependency-injection serilog .net-6.0

5
推荐指数
1
解决办法
1951
查看次数

.NET 的线程安全缓冲区

(注意:虽然我想了解 .Net 4.0 的未来想法,但该项目仅限于 .Net 3.5。)

我有一个线程,它从外部设备异步读取数据(在代码示例中由非常有创意的 strSomeData 模拟:-)并将其存储在 StringBuilder“缓冲区”中(strBuilderBuffer :-)

在“主代码”中,我想“蚕食”这个“缓冲区”。但是,从“操作”的角度来看,我不确定如何以线程安全的方式执行此操作。我理解从“数据”角度来看它是安全的,因为根据 msdn,“此 ( StringBuilder) 类型的任何公共静态成员都是线程安全的。任何实例成员都不能保证是线程安全的。” 但是,我下面的代码说明从“操作”角度来看它可能不是线程安全的。

关键是我担心两行代码:

string strCurrentBuffer = ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.ToString();
// Thread 'randomly' slept due to 'inconvenient' comp resource scheduling...
ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.Length = 0;
Run Code Online (Sandbox Code Playgroud)

如果计算机操作系统在缓冲区的“读取”和缓冲区的“清除”之间让我的线程休眠,我可能会丢失数据(这很糟糕:-(

有没有办法保证“原子性”?这两行并强制计算机不中断它们?

关于弗拉德下面关于使用 的建议lock,我尝试过,但没有成功(真的):

    public void BufferAnalyze()
    {
        String strCurrentBuffer;
        lock (ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer)
        {
            strCurrentBuffer = ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.ToString();
            Console.WriteLine("[BufferAnalyze()]  ||<<  Thread 'Randomly' Slept due to comp resource scheduling");
            Thread.Sleep(1000);  //  Simulate poor timing of thread resourcing...
            ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.Length = 0;
        }
        Console.WriteLine("[BufferAnalyze()]\r\nstrCurrentBuffer[{0}] == {1}", strCurrentBuffer.Length.ToString(), …
Run Code Online (Sandbox Code Playgroud)

c# stringbuilder buffer thread-safety .net-3.5

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