2012-04-25 40 views
6

Tôi đang viết một trò chơi sử dụng C# và đã tìm thấy một số trường hợp mà một chức năng lấy một đại biểu và tôi vô tình chuyển vào tên hàm thay vì tạo và lưu vào bộ nhớ cache để sử dụng làm tham số thay thế. Điều này làm cho một đối tượng đại biểu được tạo cho mỗi cuộc gọi đến các hàm này, sau đó ngay lập tức trở thành rác khi hàm trả về.Làm thế nào để tránh hoặc phát hiện suy luận ủy nhiệm tiềm ẩn trong C#?

Tôi muốn tìm tất cả các địa điểm mà tôi đã mắc lỗi này và tôi muốn tránh đọc từng dòng của mọi tệp tìm kiếm chúng (có nhiều năm mã). Tôi thấy làm thế nào VB có một 'tùy chọn nghiêm ngặt' mà sẽ vô hiệu hóa xây dựng ngầm của các đối tượng mà tôi nghĩ rằng sẽ làm việc cho tôi nếu C# đã có tính năng đó, nhưng tôi không nghĩ rằng nó. Tôi cũng đã xem xét các tùy chọn cảnh báo trình biên dịch và không có tùy chọn nào trong số họ có vẻ hữu ích ở đây.

Có cách nào thuận tiện hợp lý để xác định các đối tượng này được tạo ra bởi suy luận ủy nhiệm ngầm để tôi có thể tìm ra nơi tôi cần tạo/cache cuộc gọi lại để tránh rác không?

+1

Có một số mã ví dụ bạn có thể cung cấp ở đâu, ví dụ, một Visual Studio tìm kiếm regex có thể tìm thấy chúng? – mellamokb

+0

Chỉ có cách tôi thấy nếu tìm phương pháp/chức năng chấp nhận một đại biểu sau đó nhấp chuột phải-> tìm tài liệu tham khảo (mặc dù điều này liên quan đến việc kiểm tra thủ công từng cuộc gọi). –

+1

Bạn có bất kỳ bằng chứng nào cho thấy đây là * thực sự * gây ra sự cố không? Tôi hy vọng rằng trong phần lớn thời gian, nhược điểm hiệu suất là không đáng kể so với lợi ích dễ đọc của việc sử dụng chuyển đổi nhóm phương pháp thay vì bộ nhớ đệm rõ ràng. –

Trả lời

10

Tóm lại, câu hỏi của bạn là "làm cách nào tôi có thể tìm thấy tất cả chuyển đổi nhóm phương pháp?"

Hiện tại, chúng tôi đang làm việc trên một dự án có tên mã là Roslyn, cho phép bạn sử dụng cùng một công cụ phân tích ngữ nghĩa mà trình biên dịch C# và IDE sử dụng. Nó sẽ hiển thị mô hình cú pháp ngôn ngữ và sau đó cung cấp API phân tích ngữ nghĩa mà bạn có thể đặt câu hỏi về trình phân tích ngữ nghĩa.

Với Roslyn bạn có thể biên dịch tất cả mã của bạn thành các cây cú pháp và sau đó tìm kiếm các cây cú pháp đó cho mọi biểu thức. Sẽ có một API cho phép bạn xác định xem biểu thức đã được chuyển đổi thành bất kỳ thứ gì hay không và nếu có, thì trình phân tích chuyển đổi đã phân loại chuyển đổi như thế nào.

Hiện tại, chúng tôi đang ở giai đoạn "xem trước công nghệ cộng đồng"; chúng tôi có một thực hiện sơ bộ nhưng nó là hư không gần đầy đủ tính năng nào được nêu ra. Tôi không nhớ nếu phân tích chuyển đổi nhóm phương pháp đã được thực hiện trong bản phát hành CTP hay không.

Hãy thử và nếu bạn có phản hồi về điều đó, chúng tôi rất muốn nghe suy nghĩ của bạn trên diễn đàn Roslyn.

chi tiết ở đây:

http://msdn.microsoft.com/en-us/roslyn

+0

Cảm ơn, tôi đã mong chờ dự án Roslyn vì một số lý do, tôi sẽ thêm điều này vào danh sách những điều cần kiểm tra khi tôi có thể dành chút thời gian với nó. –

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