2010-03-03 43 views
5

Thời gian nạp tiền điển hình được thêm bằng cách gọi một .dll được viết bằng C++ từ ứng dụng C# bằng cú pháp sau đây?Hiệu suất của việc gọi Unmanaged .dll từ C#

[DllImport("abc.dll", EntryPoint = "xcFoo", CallingConvention = CallingConvention.Cdecl)] 
public extern static Result Foo(out IntPtr session, 
       [MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallback callback, 
       UInt64 turnKey, 
       string serverAddress, 
       string userId, 
       string password); 

Có cách nào hiệu quả hơn để làm điều đó không?

Trả lời

1

Bạn đang nói về chi phí gọi phương thức gốc? Nếu vậy, tôi không nghĩ rằng nó là đáng kể ở tất cả, vì có rất nhiều cuộc gọi như vậy trong các thư viện lớp NET framework.

Bây giờ, liệu phí trên có đáng kể cho kịch bản của bạn chỉ có thể được trả lời bằng cách thực hiện các phép đo hiệu suất và so sánh chúng với những gì bạn mong đợi.

0

Việc sắp xếp thứ tự vào phương thức gốc sẽ tốn ba phân bổ bộ nhớ từ vùng lưu trữ NT, điều này không quá tệ. Đó là đại biểu trở lại mà lo lắng.

0

Một phương pháp tốt để kiểm tra các loại điều này là ném ở một điểm break, nơi bạn thực hiện cuộc gọi. Không biết khi nào thư viện được tải, vì vậy có thể chỉ kiểm tra điểm ngắt trên cuộc gọi thứ hai (trừ khi tải chi phí là mối quan tâm chính của bạn). Sau đó mở cửa sổ tháo gỡ trong studio trực quan và xem có bao nhiêu dòng trước khi hàm dll của bạn được gọi.

Các vấn đề liên quan