পাওয়ারশেল এক্সএমএল খুব ধীর গতিতে চলছে


0

আমার কাছে কয়েকটি দম্পতি (20) এসভিজি-ফন্ট (এক্সএমএল ভিত্তিক ফন্ট ফর্ম্যাট) রয়েছে, তাদের প্রতিটি গড়ে প্রায় 300kb এবং প্রায় 100 গ্লাইফ-ট্যাগ রয়েছে। আমি প্রতিটি গ্লাইফ ইনসকেপ দিয়ে প্রক্রিয়া করতে চাই। এক্সওএমএল-প্রক্রিয়াকরণের অংশটি আমি পাওয়ারশেল স্ক্রিপ্টের সাথে করতে চাই:

  1. এক্সএমএল হিসাবে ফন্টটি খুলুন
  2. প্রতিটি গ্লাইফের উপরে ইটারেট করুন, একটি অ্যাট্রিবিউটের মানটি ধরুন এবং এই মানটির সাথে একটি টেম্পার এসভিজি (এক্সএমএল) পরামিতি সংরক্ষণ করুন
  3. ইনসকেপ দিয়ে এই ফাইলটি প্রক্রিয়া করুন
  4. এই ফাইলগুলির প্রতিটি পড়ুন
  5. নতুন ডেটা দিয়ে একটি নতুন ফন্ট-ফাইল তৈরি করুন
  6. ফন্ট সংরক্ষণ করুন, গ্লাইফ মুছুন

আমি প্রচুর পাওয়ারশেল এক্সএমএল টিউটোরিয়াল পড়েছি এবং কয়েকবার চেষ্টা করেছি এবং একটি জিনিস আছে যা আমি জানি না কী ভুল তা নয়, তবে আমি এই লাইনটির সাথে ফন্ট থেকে প্রতিটি গ্লাইফ পাচ্ছি:

$nodes = Select-Xml -Content $( Get-Content -Path $_.FullName )  -XPath "//glyph" -Namespace $namespaces

অনেক সময় প্রয়োজন এবং 60 গ্লিফ বিতরণ করে, যদি ফন্টে আরও থাকে তবে। স্ক্রিপ্টের বাকী সমস্ত অংশ সঠিকভাবে কাজ করছে, তবে আমি যদি সমস্ত 20 ফন্টগুলি প্রসেস করতে চাইছি (ভবিষ্যতে আরও হবে) এটি পুরো দিন সময় নেয় এবং সমস্ত গ্লাইফগুলি প্রক্রিয়াভুক্ত হয় না।

সুতরাং, ফাইলটি পড়ার এবং এক্সএমএল বিশ্লেষণে কোনও ব্যর্থতা আছে কি? কেন এটি এত অবিশ্বাস্যরূপে ধীর হয় এবং সমস্ত গ্লাইফগুলি প্রক্রিয়াজাত হয় না কেন?


আপনার এসভিজির কি এগুলির মধ্যে ডক্টপিইপি ঘোষণা আছে? যদি তা হয় তবে আপনি কি তাদের সরিয়ে দেওয়ার চেষ্টা করেছেন যে এটি কোনও পার্থক্য করে কিনা?
ড্যানিয়েল হ্যালি

হ্যালো! DOCTYPE অপসারণ গতি দিয়ে কৌতুক করে, অনেক ধন্যবাদ! তবে এখনও 60 টির বেশি গ্লাইফগুলি প্রক্রিয়া করা হয় না, এমনকি যদি সেগুলি বেশি হয়। কেন হতে পারে?
ফিলিপ

দুঃখিত, কেন এটি কেবল 60 গ্লিফ ব্যবহার করছে তা সম্পর্কে আমি নিশ্চিত নই।
ড্যানিয়েল হ্যালি

আপনার কিছু ফাইলের সাথে এটি খেলতে এবং একটি কাজের সন্ধানের জন্য একটি লিঙ্ক রাখতে পারেন?
এমজেএসআর

@ ভোডুমসর আপনি কী বলতে চাইছেন তা আমি জানি না: your আপনার কয়েকটি ফাইলের সাথে একটি লিঙ্ক স্থাপন করুন «, আপনি কি কোনও লিঙ্ক বা এমন কিছু পোস্ট করতে পারেন যা এই পদ্ধতির বিষয়ে আরও কিছুটা বিশদ দিয়ে ব্যাখ্যা করে?
ফিলিপ

উত্তর:


0

আপনার জন্য দম্পতি বিকল্প:

  1. Select-Xml -Path test.xml -XPath "//*[local-name()='glyph']")
  2. [xml] $x = gc test.xml ; $x.SelectNodes("//*[local-name()='glyph']")

উভয়ই খুব দ্রুত 95 টি নোড নির্বাচন করে। আপনি যা পেস্ট বিনে রেখেছিলেন তা আমি পরীক্ষা করে দেখলাম।

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