2012-02-24 15 views
7

Khi cố gắng tải ".bmp", ".png" hoặc ".jpg" trên OSX 10.7.3 bằng phiên bản hệ thống của mono .Drawing.Bitmap đối tượng các ứng dụng chỉ bị treo. Tôi nhận được không có lỗi, ứng dụng chỉ là bị mắc kẹt trên các nhà xây dựng Bitmaps ...C# Mono {bitmap mới ("tên tệp");} Chỉ cần treo trên OSX

Khi tôi chạy cùng một mã trên (Arch) Linux hoặc Windows tất cả mọi thứ hoạt động tốt.

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

    } 

    Console.WriteLine ("Hello World!");// Never gets here... 
} 

Nếu tôi tạm dừng các ứng dụng trong chế độ gỡ lỗi nó sẽ mở ra cửa sổ "tháo gỡ" và cho thấy mình bị mắc kẹt trên dòng này:

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

LƯU Ý: Sau khi tạm dừng các ứng dụng trong chế độ gỡ lỗi một vài lần nó "kỳ diệu" bắt đầu làm việc trong khi viết điều này. Tôi khuyến khích tôi không thay đổi bất kỳ mã nào. Bất cứ ai biết những gì có thể gây ra "System.Drawing.GDIPlus" để treo vì vậy tôi biết làm thế nào để tránh nó ?? Có một tập tin cài đặt codex đơn hay thứ gì đó có thể có thùng rác không?

+0

hoạt động này có hiệu quả hơn không: var bitmap = Bitmap.FromFile ("......../image.bmp") – PhonicUK

+0

Cảm nhận thời gian của bài đăng, tôi đã chuyển sang sử dụng API gốc (thông qua MonoMac) của OSX để tải hình ảnh ... Dường như chạy nhanh hơn theo cách đó. – zezba9000

Trả lời

5

Sự cố chỉ là hiệu suất. Nó không liên quan gì đến mã của bạn; hình ảnh chỉ mất nhiều thời gian hơn để tải.
Việc triển khai Mono của System.Drawing chỉ là trình bao bọc C# và không hoàn chỉnh và không (hoặc không chính xác) cung cấp tất cả các tính năng trong System.Drawing. Nó có thể hoạt động tốt trong các cửa sổ vì nó sử dụng bản địa GDIPlus.dll nhưng có thể không hoạt động tốt trong các hệ thống dựa trên Unix vì nó sử dụng động cơ Cairo. Bạn có thể tìm thêm thông tin here.

+0

Ya Tôi vừa chuyển sang sử dụng API gốc thông qua MonoMac. Vì vậy, không có vấn đề hiệu suất hơn theo cách đó. – zezba9000

+0

work205 của user2057660 đã vượt qua điều này đối với tôi, điều rất lạ và, ngoài việc tiêu thụ CPU rõ ràng, có vẻ mâu thuẫn với khách hàng tiềm năng rằng đây là hiệu suất liên quan. Nó dường như treo vĩnh viễn, là tốt. –

1

Có cùng sự cố với cài đặt Mono 3.8 mới trên 10,10; nhưng nó đã biến mất, đáng ngờ sau khi tôi đã phá vỡ trong thời gian treo, nhìn thấy thread # 4 trong GdiplusStartup().

Có thể nó liên quan đến giờ nghỉ, hoặc có thể GdiplusStartup chỉ mất một thời gian dài khi khởi động lần đầu trên OS X, làm bộ nhớ đệm phông chữ hoặc gì đó.

+0

Cách giải quyết này đã thành công đối với tôi. Trong thời gian treo, mono-sgen đã sử dụng CPU 99%. Thật kỳ lạ khi nó hoạt động. –

+1

Tôi đã chính thức đặt cụm từ "Hàng hóa của Schrodinger" để mô tả bản chất của lỗi này. –