Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/openhardwaremonitor/openhardwaremonitor.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Möller <mmoeller@openhardwaremonitor.org>2010-05-25 22:57:28 +0400
committerMichael Möller <mmoeller@openhardwaremonitor.org>2010-05-25 22:57:28 +0400
commitdaaf1f12ef62d2342f283ead625456870140b2c0 (patch)
treed6f1d889c975b5b9c37a71303d41faeba0192a11 /Utilities
parentb4203489bb847059ecb8eba2bbddc844344b8e0b (diff)
Added a workaround for the "You must keep the stream open for the lifetime of the Image." problem of the Image.FromStream method. This also reduced the overall memory usage (private working set).
Diffstat (limited to 'Utilities')
-rw-r--r--Utilities/EmbeddedResources.cs33
1 files changed, 25 insertions, 8 deletions
diff --git a/Utilities/EmbeddedResources.cs b/Utilities/EmbeddedResources.cs
index 5908cd8..cff974b 100644
--- a/Utilities/EmbeddedResources.cs
+++ b/Utilities/EmbeddedResources.cs
@@ -38,6 +38,7 @@
using System;
using System.Collections.Generic;
using System.Drawing;
+using System.IO;
using System.Reflection;
namespace OpenHardwareMonitor.Utilities {
@@ -49,10 +50,23 @@ namespace OpenHardwareMonitor.Utilities {
string[] names =
Assembly.GetExecutingAssembly().GetManifestResourceNames();
for (int i = 0; i < names.Length; i++) {
- if (names[i].Replace('\\', '.') == name)
- return new Bitmap(Assembly.GetExecutingAssembly().
- GetManifestResourceStream(names[i]));
- }
+ if (names[i].Replace('\\', '.') == name) {
+ using (Stream stream = Assembly.GetExecutingAssembly().
+ GetManifestResourceStream(names[i])) {
+
+ // "You must keep the stream open for the lifetime of the Image."
+ Image image = Image.FromStream(stream);
+
+ // so we just create a copy of the image
+ Bitmap bitmap = new Bitmap(image);
+
+ // and dispose it right here
+ image.Dispose();
+
+ return bitmap;
+ }
+ }
+ }
return new Bitmap(1, 1);
}
@@ -63,10 +77,13 @@ namespace OpenHardwareMonitor.Utilities {
string[] names =
Assembly.GetExecutingAssembly().GetManifestResourceNames();
for (int i = 0; i < names.Length; i++) {
- if (names[i].Replace('\\', '.') == name)
- return new Icon(Assembly.GetExecutingAssembly().
- GetManifestResourceStream(names[i]));
- }
+ if (names[i].Replace('\\', '.') == name) {
+ using (Stream stream = Assembly.GetExecutingAssembly().
+ GetManifestResourceStream(names[i])) {
+ return new Icon(stream);
+ }
+ }
+ }
return null;
}