ঝাঁকুনির সাথে আরও দ্রুত কোড-সমাপ্তি


108

ক্ল্যাংয়ের কোড-সমাপ্তির প্রক্রিয়াটি ব্যবহার করার সময় আমি সম্ভাব্য কোড-সমাপ্তির গতিপথগুলি তদন্ত করছি। নীচে বর্ণিত প্রবাহটি আমি অ্যান্ডারস বেকেনের, আরটি্যাগগুলিতে পেয়েছি ।

অনুবাদ ইউনিটগুলি পরিবর্তনের জন্য ডেমন মনিটরিং ফাইলগুলি পার্স করে। এটি কল clang_parseTranslationUnitএবং সম্পর্কিত ফাংশন ( reparse*, dispose*) দ্বারা সম্পন্ন হয় । যখন ব্যবহারকারী কোনও উত্স ফাইলে প্রদত্ত লাইন এবং কলামে একটি সমাপ্তির জন্য অনুরোধ করে, ডেমন সোর্স ফাইলের সর্বশেষ সংরক্ষিত সংস্করণ এবং বর্তমান উত্স ফাইলটিতে ক্যাশেড অনুবাদ ইউনিটটি পাস করে clang_codeCompleteAt। ( ঝুঁকির কোড কমপ্লিট ডক্স )।

clang_parseTranslationUnit( কমপ্লিটথ্রেড :: প্রক্রিয়া, লাইন 271 ) থেকে পাস হওয়া পতাকাগুলি রয়েছে CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes। পতাকাগুলি clang_codeCompleteAt( কমপ্লিটথ্রেড :: প্রক্রিয়া, লাইন 305 থেকে ) এ পাস হয়েছে CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns

কলটি clang_codeCompleteAtখুব ধীর - এটি সমাপ্তির অবস্থান বৈধ সদস্যের অ্যাক্সেস কোড, এর ডকুমেন্টেশনে উল্লিখিত উদ্দেশ্যযুক্ত ব্যবহারের মামলার একটি উপসেট এমনকি এমন ক্ষেত্রেও সম্পূর্ণতা পেতে প্রায় 3-5 সেকেন্ড সময় নেয় clang_codeCompleteAt। আইডিই কোড-সমাপ্তির মানদণ্ড দ্বারা এটি বেশ ধীর বলে মনে হচ্ছে। এটি দ্রুত করার কোনও উপায় আছে?


8
আমি আপনাকে সাহায্য করতে পেরে খুশি তবে আমাদের আরও সুনির্দিষ্ট প্রয়োজন। উদাহরণ কোডটি শুরু করার জন্য ভাল হবে
raph.amiard

1
পিং। এই সমস্যাটিতে কি কোনও অগ্রগতি আছে?
মেহরল্ফ

4
@ ক্যামেরন আপনার কাছে ফিরে আসতে দেরি হওয়ার জন্য দুঃখিত। আমি সব 8 সমন্বয় চেষ্টা CXTranslationUnit_SkipFunctionBodies, CXCodeComplete_IncludeMacros, CXCodeComplete_IncludeCodePatternsএবং কোডবেস আমি কাজ করছি উপর উল্লেখযোগ্য পার্থক্য দেখতে পাইনি। এগুলির সবকটি সম্পূর্ণরূপে গড়ে প্রায় 4 সেকেন্ড। আমি অনুমান করি এটি কেবল টিইউগুলির আকারের কারণে। CXTranslationUnit_PrecompiledPreambleনিশ্চিত reparseTUখুব দ্রুত। যাইহোক, এমনকি সঙ্গে CXTranslationUnit_CacheCompletionResults, clang_codeCompleteAtআমার ব্যবহারের ক্ষেত্রে যন্ত্রণাদায়কভাবে ধীর হয়।
প্রধান

1
পুনঃটুইট উপরের মন্তব্য দেখুন।
প্রধান

7
হুম, এটা দুর্ভাগ্যজনক। আপনি কি জনসাধারণের জন্য উপলব্ধ অনুবাদ ইউনিটে সম্পূর্ণ উদাসীনতা পুনরুত্পাদন করতে পারেন (উদাঃ উন্মুক্ত উত্স)? এটি যদি আমরা নিজেরাই পুনরুত্পাদন করতে সক্ষম হত তবে এটি সহায়তা করবে। সমাপ্তি প্রায় তত দ্রুত হওয়া উচিত, যেহেতু এটি অভ্যন্তরীণভাবেই করে (এটি একটি বিশেষ কোড-সমাপ্তির টোকেনকে ইনজেক্ট করে এবং সেই বিন্দু পর্যন্ত বিশ্লেষণ করে)।
ক্যামেরন

উত্তর:


6

ক্ল্যাং_পারস ট্রান্সলেশনউইনিত যে সমস্যাটি করেছে তা হ'ল প্রাকম্পম্পাইল করা উপস্থাপিকাটিকে দ্বিতীয়বার পুনরায় ব্যবহার করা হয় না যা কোড সমাপ্তি বলে। প্রাকম্পম্পাইল উপস্থাপনের সময় গণনা করুন এই সময়ের 90% এরও বেশি সময় লাগে যাতে আপনার অনুমতি দেওয়া উচিত যে প্রাক-কম্পাইল করা উপস্থাপনাটি যত তাড়াতাড়ি সম্ভব হিসাবে পুনরায় ব্যবহার করা যেতে পারে।

ডিফল্টরূপে এটি তৃতীয়বার পুনঃব্যবহার করা হয় যা অনুবাদ ইউনিটকে পার্স / reparse করতে ডাকা হয়।

ASTUnit.cpp এ এই পরিবর্তনশীল 'PreambleRebuildCounter' একবার দেখুন।

অন্যান্য সমস্যা হ'ল এই উপস্থাপনাটি একটি অস্থায়ী ফাইলে সংরক্ষণ করা হয়। আপনি অস্থায়ী ফাইলের পরিবর্তে মেমোরিতে প্রাকম্পম্পিত উপস্থাপিকা রাখতে পারেন। এটি দ্রুত হবে। :)


অসাধারণ! মনে হচ্ছে এটি আসল ইস্যুতে পৌঁছেছে। এটি একবার দেখুন এবং আপনাকে জানাতে হবে। ধন্যবাদ!
প্রধান

ঠিক আছে! যদি তোমার জন্য এটি কাজ করে, তাহলে আমাকে জানাও! এবং আপনার যদি কোন প্রশ্ন থাকে তবে নির্দ্বিধায় আমাকে জিজ্ঞাসা করুন !!!!
গুটিম্যাক

4

কখনও কখনও এই প্রশস্ততার বিলম্ব নেটওয়ার্ক সংস্থানসমূহের সময়সীমার কারণে হয় (কোনও ফাইল অনুসন্ধানের পথ বা সকেটে এনএফএস বা সিআইএফএস শেয়ার)। সময় প্রতিটি সিস্টেমের কল প্রক্রিয়া সঙ্গে আপনার রান prefixing দ্বারা সম্পন্ন করতে সময় লাগে পর্যবেক্ষণ করে দেখুন strace -Tf -o trace.outtrace.outসিস্টেম কলের জন্য অ্যাঙ্গেল বন্ধনীগুলির মধ্যে নম্বরগুলি দেখুন যা সম্পূর্ণ হতে দীর্ঘ সময় নেয়।

কোন ফাইলের প্রসেসিং শেষ হতে খুব বেশি সময় লাগে তা দেখতে আপনি সিস্টেম কলগুলির মধ্যে সময়টিও পর্যবেক্ষণ করতে পারেন। এটি করার জন্য, আপনার সঞ্চালনের প্রক্রিয়াটি উপসর্গ করুন strace -rf -o trace.out। দীর্ঘ সিস্টেম কল অন্তর সন্ধানের জন্য প্রতিটি সিস্টেম কল করার আগে নম্বরটি দেখুন। openপ্রক্রিয়াধীন হওয়া ফাইলটি কোনটি ছিল তা দেখার জন্য কলগুলি সন্ধান করতে সেদিক থেকে পিছনে যান ।

যদি এটি সহায়তা না করে তবে আপনি নিজের প্রক্রিয়াটি বেশিরভাগ সময় ব্যয় করে তা দেখতে প্রোফাইল তৈরি করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.