Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Mono{new Bitmap(";fileName";)}只是挂在OSX上_C#_Macos_Mono_Bitmap - Fatal编程技术网

C#Mono{new Bitmap(";fileName";)}只是挂在OSX上

C#Mono{new Bitmap(";fileName";)}只是挂在OSX上,c#,macos,mono,bitmap,C#,Macos,Mono,Bitmap,当尝试使用mono版本的System.Drawing.Bitmap对象在OSX 10.7.3上加载“.bmp”、“.png”或“.jpg”时,应用程序将挂起。我没有收到任何错误,应用程序只是停留在位图构造函数上 当我在(Arch)Linux或Windows上运行相同的代码时,一切正常 public static void Main (string[] args) { using (var bitmap = new Bitmap("/....../image.bmp")) {

当尝试使用mono版本的System.Drawing.Bitmap对象在OSX 10.7.3上加载“.bmp”、“.png”或“.jpg”时,应用程序将挂起。我没有收到任何错误,应用程序只是停留在位图构造函数上

当我在(Arch)Linux或Windows上运行相同的代码时,一切正常

public static void Main (string[] args)
{
    using (var bitmap = new Bitmap("/....../image.bmp"))
    {

    }

    Console.WriteLine ("Hello World!");// Never gets here...
}
如果我在调试模式下暂停应用程序,它将打开“反汇编”窗口,并在这一行上显示其卡滞:

call Status System.Drawing.GDIPlus:GdiplusStartup (UInt64, GdiplusStartupInput, GdiplusStartupOutput)

注意:在以调试模式暂停应用程序几次后,它在编写此文件时“神奇地”开始工作。我保证我没有更改任何代码。有人知道什么会导致“System.Drawing.GDIPlus”挂起,所以我知道如何避免它??是否有一个mono-codex设置文件或其他可能会把bin搞砸的东西?

问题在于性能。它与您的代码无关;图像只是加载时间较长

Mono的
System.Drawing的实现
只是一个C#包装,有点不完整,没有(或不正确地)提供
System.Drawing中的所有功能。它在windows中可能运行良好,因为它使用本机的
GDIPlus.dll
,但在基于unix的系统中可能运行不好,因为它使用的是
Cairo
引擎。您可以找到更多信息。

在10.10上安装新的Mono 3.8时也有同样的问题;但它消失了,令人怀疑的是,当我在绞刑过程中看到GdiplusStartup()中的线程#4时,它断了


可能与中断有关,或者可能GdiplusStartup在OSX上首次启动时需要很长时间,比如进行字体缓存之类的工作。

这是否更好:var bitmap=bitmap.FromFile(“…../image.bmp”)感觉到文章的时间,我已经转向使用OSX的本机API(通过MonoMac)加载图像。。。这样似乎运行得也更快。是的,我刚刚通过MonoMac使用了本机API。这样就不再有性能问题了。user2057660的解决方案对我来说已经解决了这个问题,这很奇怪,除了明显的CPU消耗之外,似乎与性能相关的前景相冲突。它似乎也永远挂着。这个变通方法对我来说是成功的。在挂起期间,mono sgen使用了99%的CPU。这真是太奇怪了。我正式创造了一个术语“薛定谔之谜”来描述这个bug的本质。