我们说的是金属制品厂.有一种机器可以将长铁棒切割成较小的部件,这些部件后来用于制造各种产品.
例如,我要求生产以下长度和数量的棒:2件248毫米,5件1150毫米,6件2843毫米,3件3621毫米.
那是分区输出.
在输入侧,我有(例如)3个2500mm的条,2个5000mm的条,6个8000mm的条和3个10000mm的条.
我应该找到一种如何最佳地切割输入条的方法 - 切割后的其余部分(其余部分太小而不能使用)应尽可能小.
我创建了算法,只需创建所有可能的组合,然后在其中选择最好的组合.代码有效,但只要输入和输出稍微大一点,计算就可以持续很长时间,所以我必须找到解决问题的新方法.
你有什么提示吗?
我问这个问题,尽管在枚举和匹配属性的C#命名约定中读过类似但不完全正确的内容
我发现我倾向于将枚举命名为复数,然后将它们用作单数,例如:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
当然它有效,这是我的风格,但任何人都可以找到这种惯例的潜在问题吗?我确实有一个"丑陋"的命名与"状态"一词:
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
附加信息:也许我的问题不够明确.在命名我定义的枚举类型的变量时,我经常要努力思考.我知道最佳实践,但它无助于简化命名这些变量的工作.
我不可能将我的所有枚举属性(比如"状态")公开为"MyStatus".
我的问题:任何人都可以找到上述惯例的潜在问题吗?这不是最佳做法.
问题改写:
嗯,我想我应该这样问这个问题:有人能用一种很好的通用方法来命名枚举类型,这样在使用时,枚举"实例"的命名会非常简单吗?
我使用以下代码发送消息:
var transaction = new MessageQueueTransaction())
transaction.Begin( );
var message = new Message
{
Body = myContent,
Recoverable = true
};
m_oMessageQueue.Send( message , myTransaction );
transaction.Commit( );
Run Code Online (Sandbox Code Playgroud)
并使用a BeginRecieve和ReceiveCompleted事件处理程序接收它.
如果我的事件处理程序在调用之前失败EndRecieve,那么该消息是否应保留在队列中并且可用于后续的接收调用?我看到的行为是消息永远消失了.(或者可能会有超时,之后它会再次出现?)
更新接收消息的代码如下所示.
var messageQueue = new MessageQueue( myPath );
messageQueue.ReceiveCompleted += messageQueue_ReceiveCompleted_ThrowException;
messageQueue.BeginReceive();
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我在messageQueue_ReceiveCompleted_ThrowException事件处理程序中抛出异常.
然后我用一个工作事件处理程序重复上面的代码,但我没有被调用.
好的,我有一个TListBox,有时可能会被要求显示43,000行!
我知道,这几乎没有任何意义,但确实如此.
现在这是当前的问题:
使用内置的Sort方法及其Compare回调函数几乎可以永久使用,就像很多分钟一样.
因此,我将列表框中的字符串从ShortStrintgs的普通旧动态数组中提取出来,对其执行QuickSort(),大约需要三秒钟.我想是啊!
做一点思考,我看到QuickSort正在移动所有这些字符串,这是不需要的,所以我将代码移动到指针或索引到字符串,瞧,排序再快一点,羚牛在一秒钟内排序43,000项.大赢,是吗?
但是,现在,如果我执行LB.Items.Add()或LB.Items.Assign将已排序的字符串移动到列表框中,则需要30秒!即使发生了BEgin/EndUpdate.如果我浏览代码,我会看到很多东西正在继续使用delete()Insert()INsertObject()和Windows消息没有任何理由.
片刻虽然揭示了我拥有LB.TStrings中的所有字符串,但我只需要将它们拖到我的QuickSorted()数组周围.这应该是微不足道的,只是移动一些指针.
但我没有看到任何可见的方法来设置原始TStringList指针.不,Exchange()真的很慢.
我有什么想法可以获得TString字符串指针?这应该是微不足道的,但我没有看到它.
谢谢,
乔治
我正在使用 PHP 和 GD 库。
我想在另一张图片上画一张图片(比如这个:http : //www.gravatar.com/avatar/107f2fafb2d29fedc3783b141139a878?s=128&d=identicon&r= PG):http : //www.geekpedia.com/gallery/fullsize /simplistic-windows-wallpaper.jpg在指定坐标(左上角或右上角或图像中的任何位置)。
如何使用 PHP 和 GD 库做到这一点。
我在PHP中动态生成一个文本文件,因此它具有.php扩展名,但是文本/纯MIME类型.除IE8外,所有浏览器都将文件显示为格式良好的预格式化文本.
谷歌搜索告诉我他们已经添加了安全性,如果HTTP标头内容类型与预期的内容类型不匹配(我认为基于扩展和一些嗅探)然后它强制下载文件.在我的情况下,我必须打开它,并允许打开我刚刚告诉它打开的文件!这可能是Win7的烦恼.当然,提供静态纯文本文件可以正常工作.
那么我可以阻止IE8下载文件并让它正常查看吗?代码必须在多个共享托管环境中运行,所以我认为我坚持使用.php扩展.
有没有一种正确的方法可以打破foreach,以便IEnumerable <>知道我已经完成并且应该清理它.
请考虑以下代码:
private static IEnumerable<Person> getPeople()
{
using (SqlConnection sqlConnection = new SqlConnection("..."))
{
try
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("select id, firstName, lastName from people", sqlConnection))
{
using (SqlDataReader reader = sqlCommand.ExecuteReader())
{
while (reader.Read())
yield return new Person(reader.GetGuid(0), reader.GetString(1), reader.GetString(2));
}
}
}
finally
{
Console.WriteLine("finally disposing of the connection");
if (sqlConnection.State == System.Data.ConnectionState.Open)
sqlConnection.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果他的消费者没有脱离foreach,那么everthing很好并且读者将返回false,while循环willend并且该函数清除数据库命令和连接.但是如果在我结束之前呼叫者从foreach断开会发生什么呢?
抛出的一些异常如下:
throw new Exception( errMsg );
Run Code Online (Sandbox Code Playgroud)
... doest正在停止我的申请!
我的期望是当我扔任何前任. - 应立即停止应用程序.
但我注意到我的应用程序抛出一个前.一个接一个(特别是绑定时)而不是终止相同的时间
EDIT_1:
当它可以拦截时,我没有try-catch块
EDIT_2:
如上所述 - 这主要发生在绑定时.
例如,我有对象的getter检查用户的权限(GetValue方法) - 如果不引发异常.
我可以在调试器中看到它执行抛出新的Exception(...) 语句,但应用程序不会停止.我也注意到异常被抛出的次数与绑定集合中的许多项目一样多...
知道如何强制停止绑定并提升真正的异常吗?
示例代码来说明我在说什么
public string Name {
get { return GetValue( name, "Name"); }
}
Run Code Online (Sandbox Code Playgroud) 好的,这只是一个小小的警告.我目前正在与ESRI的可爱ArcSDK合作.现在要从任何函数中获取值,您基本上必须传递变量,您想要将值赋值给.
例如:
long output_width;
IRasterProps->get_Width(&output_width);
Run Code Online (Sandbox Code Playgroud)
这是一件小事,但是当你必须从他们的各种功能中挑出大约30个不同的数据时,它真的开始变得烦人.
所以我想知道是否有可能以某种方式通过STL或C++的魔力将其转换为:
long output_width = IRasterProps->get_Width(<something magical>);
Run Code Online (Sandbox Code Playgroud)
所有函数都返回void,否则它们中的一些可能会返回一个HRESULT,我可以放心地忽略它.有任何想法吗?
***编辑****
继承了我得到的最终结果:)!!!!!
A magic(P p, R (__stdcall T::*f)(A *)) {
A a;
((*p).*f)(&a);
return a;
}
Run Code Online (Sandbox Code Playgroud)