যখন কোনও নিকৃষ্ট প্রক্রিয়া দীর্ঘ লাইন উত্পন্ন করে তখন কীভাবে ধীরগতি রোধ করা যায়?


14

আমি কিছু স্কিম কোড হ্যাক করতে গিজার সহ ইম্যাক্স ব্যবহার করি। আমি যখন রিপ্লেতে ঘুরে বেড়াচ্ছি তখন আমি মাঝে মাঝে এমন অভিব্যক্তিগুলি মূল্যায়ন করি যা এর ফলে অনেকগুলি আউটপুট হয়, প্রায়শই সমস্ত এক লাইনে।

উদাহরণস্বরূপ, আমি সবেমাত্র এসআরএফআই -১১ (স্ট্রিমস) নিয়ে খেলেছি এবং একটি বড় ফাইল থেকে একটি অক্ষর প্রবাহ তৈরি করেছি; তারপরে আমি স্ট্রিমটিকে বাধ্য করলাম এবং গিজার আমার বাফারের মধ্যে অক্ষরের স্ট্রিম হিসাবে ফাইলের পুরো বিষয়বস্তুকে বারফিড করে দিয়েছিল। প্রায় সঙ্গে সঙ্গেই, যেখানে আউটপুট লাইন যোগ করা আরো এবং আরো অক্ষর হিসাবে একটি স্থগিত, এবং কোন ব্যাপার আর কতকাল রাখা থেকে এ গিয়ে Emacs স্থল টিপে C-gবা C-c C-cআমি এ গিয়ে Emacs (অথবা Geiser) স্টপ করা গেল না।

এটি আমার পুরো ইম্যাকস অধিবেশনটিকে ভেঙে দিয়েছে কারণ ইমাসগুলি এখন আমার ইনপুটটিকে সম্পূর্ণভাবে উপেক্ষা করে, এই ভেবে যে এই বিশাল চরিত্রের ধারাটি সমস্তই এক লাইনে একটি প্রতিক্রিয়াহীন গিজার আরপিএল বাফারে প্রিন্ট করা উচিত।

আমার ইমাসস সেশনটিকে আমার ধ্বংসাত্মক কৌতূহল থেকে রক্ষা করতে আমি কি কিছু করতে পারি? ( যাইহোক যাইহোক খুব দীর্ঘ লাইনগুলি প্রদর্শন করার সময় ইমাকস কেন এত ধীর হয়ে যায়?) আমি কি লম্বা রেখার জন্য একটি সীমা নির্ধারণ করতে পারি এবং ইমাসকে বলতে পারি যে খুব দীর্ঘ লাইনগুলি প্রদর্শন করার চেষ্টা না করা ঠিক আছে কি?



2
ওয়েল, আমার প্রশ্নটি প্রতি সেউ লম্বা লাইন প্রদর্শন সম্পর্কে নয়; আমি জানতে চাই যে আমি এই ধরণের জিনিসটিকে প্রথম স্থানে কীভাবে এড়াতে পারি (ইমাক্স একটি নিকৃষ্ট প্রক্রিয়া থেকে লাইনটি পড়ে, এটি কোনও ফাইল যা আমি ঠিক করতে পারি তা থেকে পড়া হয় না); এবং এটি কীভাবে আমি ইমামসের একক গতিশীল বাফারকে উত্সর্গ করার জন্য আমার ইমাস সেশন হারাতে পারি।
রেকাডো

"ঠিক আছে, আমার প্রশ্ন দীর্ঘ লাইনগুলি প্রদর্শন করার বিষয়ে নয়" তারপরে সম্ভবত আপনার শিরোনাম পরিবর্তন করা উচিত। সম্ভবত আপনি নিকৃষ্ট প্রক্রিয়া আউটপুট ফিল্টার করতে এবং একটি নির্দিষ্ট পরিমাণ অক্ষরের পরে নতুন লাইন যুক্ত করতে চান?
আয়া

সত্যই যদিও, এটি দীর্ঘ লাইন সঙ্গে সামান্য আছে। yesএকটি ইন ansi-termউদাহরণস্বরূপ একটি অনুরূপ (কিন্তু হয়েছে যে ভয়ঙ্কর) প্রভাব। সত্যই এটি কেবল পাঠ্যের ভলিউম যা ইমাসকে বিরতি দেয়।
পাইথননট

একটি বাফারে পাঠ্য সন্নিবেশ বেশ দ্রুত, এটি পুনরায় প্রদর্শনীর ক্রিয়াকলাপ যা এটি এটির তুলনায় ধীর হয়ে যায়। সত্যি কথা বলতে, yesভিটিই টার্মিনাল এমুলেটরটিতে চালনা করা আমার সিপিইউর সমস্তগুলি সর্বাধিক করে তোলে, তাই আমি এটি উদাহরণ হিসাবে ব্যবহার করব না।
wasamasa

উত্তর:


12

ইতিমধ্যে মন্তব্যে উত্তর হিসাবে, ইমাকগুলি দীর্ঘ লাইনের জন্য এর পুনরায় প্রদর্শনে খুব ধীর হয়ে উঠা একটি সুপরিচিত সমস্যা । এটি ঠিক করা খুব সুন্দর হবে তবে সঠিকভাবে টানতে প্রচুর চিন্তাভাবনা করা দরকার। আমার এই ধারণাটি কীভাবে এই নথির 6.3 অনুচ্ছেদের উপর ভিত্তি করে সম্পন্ন করা যায় (মূলত বর্তমান বাফারে ভিজ্যুয়াল লাইনের তথ্য সংরক্ষণ করুন এবং এটি হোয়াইটস্পেস, প্রদর্শন বৈশিষ্ট্য, উইন্ডো পরিবর্তন ইত্যাদির সন্নিবেশ সম্পর্কিত আপডেট করুন, তারপরে সেই তথ্যটি ব্যবহার করুন এটির জন্য সর্বদা স্ক্যান এড়াতে পুনর্নির্ধারণের কোড) তবে সি ইন্টার্নালগুলি এটিকে সরাতে যথেষ্ট পরিচিত নয়।

যদিও কর্মক্ষেত্র আছে। সর্বাধিক সুস্পষ্ট বিষয়গুলি হ'ল ডিসপ্লে-সম্পর্কিত প্যারামিটারগুলি টিউন করা হবে (যেমন, গ্রাফিকাল ইম্যাক্স উদাহরণগুলিতে ভিজ্যুয়াল লাইন কাটাকে সক্ষম করা, কোনও গ্রাফিকাল ইমাক ব্যবহার না করে স্বয়ংক্রিয়ভাবে সম্পন্ন করা, বিড়ি বৈশিষ্ট্যগুলি অক্ষম করা ইত্যাদি) এবং আপনি ফাইলের বিষয়বস্তুগুলিকে প্রিক্রোসোসিং করে ' পুনরায় পড়ছে A কম স্পষ্টতই স্বয়ংক্রিয়ভাবে ফাইলগুলি পোস্ট-প্রসেসিং করা হয়, এটি তাদের লাইনগুলি কেটে ফেলা বা পাঠ্য বৈশিষ্ট্য যুক্ত করে লাইনগুলি প্রকৃতপক্ষে তার চেয়ে ছোট দেখায়। এটিকে আরও আকর্ষণীয় উত্তরে রূপান্তরিত করার জন্য, আমি পূর্ববর্তী বিকল্পটির একটি সুন্দর কুৎসিত হ্যাক উপস্থাপন করব যা কেবলমাত্র- comintপরিবর্তিত মোডের জন্য কাজ করবে :

(defun my-comint-shorten-long-lines (text)
  (let* ((regexp "^\\(.\\{80\\}\\).*?$")
         (shortened-text (replace-regexp-in-string regexp "\\1" text)))
    (if (string= shortened-text text)
        text
      (propertize shortened-text 'help-echo text))))

(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)

এটি সংজ্ঞায়িত করে my-comint-shorten-long-lines, এমন একটি ফাংশন যা সম্ভবত অনেকগুলি রেখার সমন্বয়ে একটি স্ট্রিং নেয় এবং এতে কোনও রেখাটি 80 অক্ষর বা তার বেশি দৈর্ঘ্যের সংক্ষিপ্ত সংস্করণের সাথে প্রতিস্থাপনের জন্য নিয়মিত এক্সপ্রেশনগুলির শক্তি ব্যবহার করে যা মূল টেক্সট এটির উপরে ঘোরাফেরা করার পরে প্রদর্শিত হয়। এতে যখন হুক হিসাবে ব্যবহৃত comint-preoutput-filter-functionsহবে comintতখন এটি প্রদর্শিত হওয়ার আগে সমস্ত আউটপুট ফিল্টার করবে ।

যাইহোক, হ্যাকের এই উপস্থাপনাটিতে বেশ মারাত্মক দুর্বলতা রয়েছে। বেসিক ফন্টিফিকেশন চলছে এমন মোডগুলিতে (যেমন, M-x ielm), এটি আনন্দের সাথে লাইনগুলি কেটে ফেলা হবে যা একটি স্ট্রিংয়ের অংশ এবং সেভাবে পরের উদ্ধৃতি পর্যন্ত স্ট্রিং হিসাবে সবকিছুকে সজ্জিত করবে! এটি আমরা চাই না এবং এটি আরও কিছুটা রেইগেক্স প্রভুত্বের সাথে সংশোধন করা যেতে পারে (তবে সম্ভবত পাইথনের মতো ভাষার জন্য একটি আরইপিএল এর ভিতরে ভেঙে যাবে)। আমরা এটির সময়ে, আসুন স্বল্প আউটপুটটিও হাইলাইট করি:

(defun my-comint-shorten-long-lines (text)
  (let* ((regexp "^\\(.\\{80\\}\\).*?\\(\"?\\)$")
         (shortened-text (replace-regexp-in-string regexp "\\1\\2" text)))
    (if (string= shortened-text text)
        text
      (propertize shortened-text 'font-lock-face 'shadow 'help-echo text))))

(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)

এটি কিছুটা ভাল, তবে এখনও কুরুচিপূর্ণ। ভালো কিছু আউটপুট উপর ঝুলে find /মধ্যে M-x shellমর্মস্পর্শী নয় (আমরা আদর্শভাবে শুধুমাত্র unshortened লাইন, না সব আউটপুট প্রদর্শন করাতে চান চাই), স্ট্রিং সনাক্তকরণ শ্রেষ্ঠ সময়ে প্রাথমিক এবং ছাঁটাই পরিবর্তে সবকিছু fontifying এর উপবৃত্ত সাথে উন্নত নির্দেশিত যেতে পারে। সর্বোপরি, এটি এমনকি গ্যারান্টিযুক্তও নয় যে পাঠ্যটি আসবে তা ব্যাচগুলিতে পরিণত হয়নি। অস্থায়ী বাফারে প্রসেসিং স্টেপটি করার জন্য এই সমস্ত চিৎকার করে, তবে অনুশীলন হিসাবে পাঠকের জন্য ছেড়ে দেওয়া হবে (বা সম্ভাব্য ব্লগ পোস্ট হিসাবে লেখক)।


4

পাইথনের সাথে যেমনটি ঘটেছিল তেমনই, পাইথন-মোড.এল, https://launchpad.net/python-mode এ সমাধানটি কমিট-মোডের মাধ্যমে নয়, সরাসরি প্রক্রিয়াতে সংযোগ করা।

start-processপ্রেরণ-প্রেরণ স্ট্রিং উপর নির্ভর করে

উদাহরণস্বরূপ ফাংশন দেখুন py--start-fast-processএবংpy--fast-send-string-intern

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