mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-08-30 22:05:08 +00:00
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).
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user