这一直困扰着我一段时间.当我看到任何以文本打印的Ruby方法时,它通常显示为:
Class#method
Run Code Online (Sandbox Code Playgroud)
要么
#method
Run Code Online (Sandbox Code Playgroud)
现在,我会用:
Class.method
Run Code Online (Sandbox Code Playgroud)
为什么所有Ruby方法都以井号开头?有什么理由吗?只是好奇.
int main()
{
char c = 0xff;
bool b = 0xff == c;
// Under most C/C++ compilers' default options, b is FALSE!!!
}
Run Code Online (Sandbox Code Playgroud)
C或C++标准都没有将char指定为有符号或无符号,它是实现定义的.
为什么C/C++标准没有明确地将char定义为有符号或无符号以避免像上述代码那样的危险误用?
好吧,这是我第一次尝试内存分析.NET应用程序(我已经完成了CPU调优),我在这里遇到了一些障碍.
我在我的应用程序中有一个视图,每页加载40个图像(最大),每个运行大约3MB.最大页数为10.由于我不想一次保留400张图像或1.2GB内存,因此在更改页面时将每个图像设置为空.
现在,起初我认为我必须对这些图像进行过时的引用.我下载了ANTS profiler(伟大的工具BTW)并进行了一些测试.对象生命周期图表告诉我,除了父类中的单个引用之外,我没有对这些图像的任何引用(这是设计的,也通过精心梳理我的代码来确认):
父类SlideViewModelBase
永远存在于缓存中,但是MacroImage
当页面更改时,属性设置为null.我没有看到任何迹象表明这些物体应该保持比预期更长的时间.
我接下来看一下大对象堆和内存使用情况.在查看三页图像后,我分配了691.9MB的非托管内存和LOH上的442.3MB. System.Byte[]
来自我System.Drawing.Bitmap
的BitmapImage
转换,几乎占据了所有的LOH空间.这是我的转换代码:
public static BitmapSource ToBmpSrc( this Bitmap b )
{
var bi = new BitmapImage();
var ms = new MemoryStream();
bi.CacheOption = BitmapCacheOption.OnLoad;
b.Save( ms, ImageFormat.Bmp );
ms.Position = 0;
bi.BeginInit();
ms.Seek( 0, SeekOrigin.Begin );
bi.StreamSource = ms;
bi.EndInit();
return bi;
}
Run Code Online (Sandbox Code Playgroud)
我很难找到所有非托管内存的去向.我System.Drawing.Bitmap
起初怀疑这些物体,但是ANTS并没有显示它们在附近,我也进行了一次测试,我确保所有这些都被处理掉了,并没有什么区别.所以我还没有弄清楚所有非托管内存的来源.
我目前的两个理论是:
如果有人有任何理论或剖析技巧,我将非常感激,因为(当然)我们正处在一个紧迫的期限内,我正在争先恐后地完成最后一部分工作.我认为通过追踪C++中的内存泄漏已经被宠坏了......谁会想到?
如果您需要更多信息或希望我尝试别的,请询问.对于这里的墙上文字感到抱歉,我尽量保持简洁.
我有三个双变量a,b和c
a = 0.000006
b = 6
c = a/b;
Run Code Online (Sandbox Code Playgroud)
所以C应该是0.000001
我想在文本框中显示这个值,所以我写了
textbox.text = c.tostring();
Run Code Online (Sandbox Code Playgroud)
但它的结果为"1E-06"..
任何人都可以帮助我如何在文本框中输入正确的值?
谢谢
C#,String的Split()方法,如何将结果字符串[]放入ArrayList或Stack?
我有一个控件(派生自System.Windows.Forms.Control),在某些方面需要透明.我已经使用SetStyle()实现了这个:
public TransparentControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent.
}
Run Code Online (Sandbox Code Playgroud)
现在,如果表单和透明控件之间没有控件,则此方法有效.但是,如果在透明控件(这里是用例)下面碰巧有另一个控件,则它不起作用.中间控件不是绘制,但下面的表格确实显示.我可以通过重写CreateParams并设置WS_EX_TRANSPARENT flashg来获得我需要的效果:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20; // WS_EX_TRANSPARENT
return cp;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是它确实减慢了控件的绘制速度.控件已经是双缓冲的,所以没有什么可做的.性能受到的打击非常糟糕,这是不可接受的.还有其他人遇到过这个问题吗?我可以找到的所有资源建议使用方法#1,但同样,这在我的情况下不起作用.
编辑:我应该注意到我确实有一个解决方法.子(透明)控件可以简单地将自己绘制到父对象的Graphics对象上,但它真的很笨,我根本不喜欢这个解决方案(虽然它可能就是我所拥有的).
EDIT2:所以,按照我在.NET中透明度如何工作的建议,我在我的用户控件中实现了IContainer接口,其中包含透明控件.我创建了一个实现ISite的类,我将我的子控件添加到UserControl的Components集合中,Container属性在调试器中正确排列,但我仍然没有获得透明效果.有没有人有任何想法?
我正在尝试创建一个WPF窗口WindowStyle="None"
(用于自定义按钮,没有标题),无法调整大小.设置ResizeMode
以NoResize
删除我想要保留的空气边界.
我可以设置最小/最大尺寸属性并完成它,除了:
所以,我有一个简单的方案,让我99%的方式:
public class BorderedWindowNoResize : Window
{
[DllImport( "DwmApi.dll" )]
public static extern int DwmExtendFrameIntoClientArea(
IntPtr hwnd,
ref MARGINS pMarInset );
[DllImport( "user32.dll", CharSet = CharSet.Auto )]
public static extern IntPtr DefWindowProc(
IntPtr hWnd,
int msg,
IntPtr wParam,
IntPtr lParam );
public BorderedWindowNoResize()
{
Loaded += BorderedWindowNoResize_Loaded;
}
private void BorderedWindowNoResize_Loaded( object sender, RoutedEventArgs e )
{
IntPtr mainWindowPtr = new WindowInteropHelper( this ).Handle;
HwndSource mainWindowSrc = HwndSource.FromHwnd( mainWindowPtr ); …
Run Code Online (Sandbox Code Playgroud) 所以,让我警告你; 我想要一种让黑客工作更好的方法.我承认这是一个黑客攻击,我肯定愿意接受对整个问题的不同看法.也就是说,如果我想让代码截止并且我们有一个有点激进的发布日期,我需要很快得到这个.
因此,我将无法立即进行大的更改,但我可以轻松地为此软件的第一个补丁执行此操作.因此,欢迎短期和长期解决方案,但短期解决方案(如果可能)更可取.
好的,这就是问题所在; 我有一个应用程序将命令发送到机器人硬件设备.在发送需要等待的命令(例如,需要花费未知时间的物理运动)之后,UI进入"忙碌状态".发生这种情况时,将禁用所有将发出另一个阻止命令的控件,因为机器无法处理它们.
当UI退出忙碌状态时,将再次启用所有控件,但由于显而易见的原因,不会保留Tab键顺序.这使得输入区域的标签变得不可能,并且看到我自己几乎完全使用键盘是不可接受的.我目前解决这个问题的方案是:
这有点......有点儿.手头的问题(因为我可以想到更多的失败场景......)是这个逻辑将打开一个上下文菜单,如果它是开放的和另一个.考虑:
(现在我意识到你可以说在右键单击上执行移动并显示上下文菜单是一个坏主意,但是上下文菜单命令是非阻塞的,启用的,并且它具有方便的域特定用途. )
就是这样.我甚至无法在右键单击中获得焦点,并且将焦点设置到菜单本身也不起作用.我只是好奇,如果有人有更好的计划这样的事情.我意识到这是一个尴尬和非常狭隘的环境.感谢您提前提供的任何帮助,我将更多地玩这个...
我需要在C#中存储4000字符串的固定大小(8-char),但我不知道在添加和检索项目的空间和时间方面最好用什么:Bloom过滤器,哈希表或字典?如果有人可以帮助我